ListGenericFoo
package org.wp.generic;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListGenericFoo<T extends List> {
private T[] fooArray;
public T[] getFooArray() {
return fooArray;
}
public void setFooArray(T[] fooArray) {
this.fooArray = fooArray;
}
public static void main(String args[]) {
ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>();
ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>();
LinkedList[] linkedList1 = new LinkedList[10];
ArrayList[] arrayList = new ArrayList[10];
foo1.setFooArray(linkedList1);
foo2.setFooArray(arrayList);
}
}
GenericFoo
package org.wp.generic;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
public class GenericFoo<T> {
private T foo;
public T getFoo() {
return foo;
}
public void setFoo(T foo) {
this.foo = foo;
}
public static void main(String args[]) {
GenericFoo<? extends List> foo = null;
foo = new GenericFoo<LinkedList>();
foo = new GenericFoo<ArrayList>();
GenericFoo<? super List> foo1 = null;
foo1 = new GenericFoo<Object>();
foo1 = new GenericFoo<Collection>();
GenericFoo<String> foo2 = new GenericFoo<String>();
foo2.setFoo("hello world");
// GenericFoo<?> 等价于 GenericFoo<? extends Object>
GenericFoo<? extends Object> foo3 = foo2;
System.out.println(foo3.getFoo());
foo3.setFoo(null);
System.out.println(foo3.getFoo());
// 错误 foo3.setFoo("welcome");
}
}