Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
This program doesn't compile import java.util.*; public class TestGenerics { /**Subclasses are parameterized by their own type*/ private static abstract class SelfType<T extends SelfType<T>>{ public abstract T getThis(); } /**Supertype inherits directly from the parameterized SelfType*/ private static class SuperType extends SelfType<SuperType>{ @Override public SuperType getThis(){ return this; } } /**Subtype inherits indirectly from the parameterized SelfType*/ private static class SubType extends SuperType{} /**Creates a list containing a single SelfType*/ public static <T extends SelfType<T>> List<T> makeSingletonList(T t){ return Collections.singletonList(t); } /** * Creates a list containing a single SelfType, allowing the list's * element-type to be a supertype of the type of its single element */ public static <T extends SelfType<T>,S extends T> List<T> makeSingletonList2(S s){ return Collections.singletonList((T)s); } public static void main(String[] args){ /*making lists of super types works fine ...*/ makeSingletonList(new SuperType()); List<SuperType> lsup = makeSingletonList(new SuperType()); /*but we can't make a list of sub types; seems weird ...*/ List<SubType> lsub = makeSingletonList(new SubType()); //ERROR /*can't even call it w/o assigning the return value:*/ makeSingletonList(new SubType()); //ERROR /*so instead, we should be able to make lists of super type containing sub type elements*/ makeSingletonList2(new SubType()); //ERROR /*even if we assign the return value:*/ lsup = makeSingletonList2(new SubType()); // ERROR (eclipse is okay with this though) /*this still doesn't work either:*/ lsub = makeSingletonList2(new SubType()); // ERROR /*we can make lists of super type this way though*/ makeSingletonList2(new SuperType()); // (eclipse doesn't like this though) /*also ok if we assign the return value*/ lsup = makeSingletonList2(new SuperType()); } } See http://forum.java.sun.com/thread.jspa?threadID=632009&tstart=0 ###@###.### 2005-06-01 00:42:45 GMT
|