I would like you give an example for you I have done before
It will help you I think
package com.scjp.genericsExamples;
import java.util.ArrayList;
import java.util.List;
public class GenericGeneralTest {
public static void main(
String[] args) {
List <String> stringList = new ArrayList<String>();
stringList.add("string1");
//won't work stringList.add(3);
List animals = new ArrayList();
animals.add(new Dog());
List<Animal> animalList = new ArrayList<Animal>();
animalList.add(new Dog());
animalList.add(new Cat());
//won't work animalList.add(new Human());
animalList.add(new Animal());
//won't work List<Object> objectList = new ArrayList<Integer>();
//won't work List <Animal> animalPolyMorphism = new ArrayList<Dog>();
Animal[] animalArray = new Animal[5];
Animal[] animalArrayref = new Dog[5]; //this works for arrays not for generics
Animal a = animalList.get(0); // no cast required
Animal b = (Animal)animals.get(0); // cast is required
legacyMethod(animalList);
genericMethodTest(animalList);
List<Dog> dogList = new ArrayList<Dog>();
// this won't work subtypes are not work with generic method calls
// genericMethodTest(dogList);
genericMethodTest(animals);
genericMethodTestForDog(dogList);
genericMethodTestForDog(animals);
canAcceptSubtype(dogList);
canAcceptSubtype(animalList);
canAddWithSuper(dogList);
canAddWithSuper(animalList);
wildCard(dogList);
wildCard(animalList);
//won't work objectList(dogList);
List<Object> oList = new ArrayList<Object>();
objectList(oList);
//syntax
//? can be in reference part (left)
List<?> reference1 = new ArrayList<Dog>();
List<? extends Animal> reference2 = new ArrayList<Animal>();
List<? super Dog> reference3 = new ArrayList<Animal>();
List<? super Integer> list = new ArrayList <Object> ();
}
public static void legacyMethod(List legacy)
{
//this method works
legacy.add("string");
}
public static void genericMethodTest(List<Animal> inAnimalList)
{
inAnimalList.add(new Dog());
}
public static void genericMethodTestForDog(List<Dog> inDogList)
{
inDogList.add(new Dog());
}
//? provides polymorphism for generics
public static void canAcceptSubtype(List< ? extends Animal> list)
{
list.add(null); //thats means you cannot add something
Animal a = list.get(0); // you only use get
}
public static void canAddWithSuper(List <? super Dog> list)
{
list.add(new Dog());
// won't work with animal list.add(new Animal());
}
public static void wildCard(List<?> list)
{
// won't add list.add("");
//YOU COULD PUT THE WRONG TYPE IN A COLLECTION
}
public static void objectList (List<Object> oList)
{
oList.add(new Dog());
}
}