在java中,我可以做更多或更少的事情吗?怎么样?
public class SomeGenericClass<T> extends T{
}
答案 0 :(得分:4)
我认为这是JLS(§8.1.4)的相关引用:
ClassType [在
extends
子句中提供]必须命名一个可访问的(§6.6)类类型,否则会发生编译时错误。
(关于可访问性的一点不相关)。
类类型为not the same thing as a type variable (§4.3)(T
是),因此尝试执行此操作将是编译时错误。
答案 1 :(得分:0)
由于多种原因,您无法public class SomeGenericClass<T> extends T
:
类型擦除会将T
删除为Object
。并且说public class SomeGenericClass<T> extends Object
毫无意义,因为Object
已经是所有类型的基类。
想象一下,如果它被允许并且我执行类似public class SomeGenericClass<T extends Comparable> extends T
之类的操作,则类型擦除会将其转换为public class SomeGenericClass<Comparable> extends Comparable
,但接口未实现扩展。
答案 2 :(得分:-1)
public class SomeGenericClass<T> extends T{
}
你必须更好地理解泛型。 SomeGenericClass 是一个模板(C ++术语)。实际上,它对编译器没有任何意义。你不能写
SomeGenericClass<T> obj = new SomeGenericClass<T>() // this is invalid
相反,您需要提供type属性。此信息补充了@Andy Turner提供的上述答案