传入泛型参数和不带泛型参数的泛型类有什么区别?
示例:
简单的泛型类:
public class Foo<T> { /*...*/ }简单类扩展了简单泛型类,将泛型参数设置为一些不相关的类型:
public class FooFoo extends Foo<Type1> { /*...*/ }另一个泛型类
public class Bar<T> extends FooFoo { /*...*/ }作为泛型参数的基类需要扩展类Foo
public class TestFooClass<T extends Foo<?>> { /*...*/ }问题是这两个参数之间的差异是什么?
public class BarTestOne extends TestFooClass<Bar> { /*...*/ }
public class BarTestTwo extends TestFooClass<Bar<?>> { /*...*/ }问题
Class<T> class = (Class<T>) ((Foo)getClass().getGenericSuperclass()).getActualTypeArguments()[0];在第一种情况下,代码可以在第二种情况下工作。
发布于 2010-07-07 23:22:34
例如,如果你有一个List,你可以添加它,如果你有一个List<?>,你不能添加,因为编译器不知道你的对象是否与对象的“实际泛型类型”兼容。
至于反射代码,我不知道。它显示getClass(),这取决于您调用它的对象;在本例中,对象显然是this……这段代码是从哪里调用的?
https://stackoverflow.com/questions/3195987
复制相似问题