我开始学习Java-generics。我对泛型语法及其含义有一些误解。如果我的问题看起来太微不足道,我请求理解。
你可以写:
public class MyClass<SomeClass> {}
你可以写:
public class MyClass<C extends SomeClass> {}
你也可以写:
public class MyClass<? extends SomeClass> {}
这些案例之间的区别是什么?
我猜对了吗?尤其是第二种和第三种情况的使用有何区别?
提前感谢您的解释!
答案 0 :(得分:1)
不同之处在于您无法在泛型类声明中使用?
public class MyClass<? extends SomeClass> {} // this isn't valid
上述声明会导致编译错误。
使用以下格式定义泛型类:
类名{/ * ... * /}类型参数部分, 由尖括号(&lt;&gt;)分隔,在类名后面。它指定 类型参数(也称为类型变量)T1,T2,...和Tn。
public class MyClass<C extends SomeClass> {}
在此声明中C
是 type-argument ,它可以是SomeClass类型或其任何SubClass类型。
示例:
Class SomeOtherClass extends SomeClass {
}
MyClass clazz = new MyClass<SomeOtherClass>();
MyClass clazz = new MyClass<SomeClass>();