在Java中,我可以继承类型参数提供的类吗?

时间:2015-11-17 09:07:21

标签: java templates generics inheritance type-parameter

在java中,我可以做更多或更少的事情吗?怎么样?

public class SomeGenericClass<T> extends T{
}

3 个答案:

答案 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提供的上述答案