Java覆盖构造函数使用List – “相同的擦除”错误
嗨,我想覆盖自定义类MyList中的构造函数。
下面的代码可以编译,我收到“相同的擦除”错误。 对于编译器List
与List
类型相同
有人可以建议我如何解决这个问题。 我尝试使用List
并使用instanceof
但我无法解决这个问题,但没有成功
private static class MyList { private int type; public MyList (List custom1) { type = 1; } public MyList (List custom2) { type = 2; }
由于所谓的类型擦除 ,通用类型信息在编译期间丢失 。 当擦除类型信息时,两者都编译为public MyList(List l)
。 这就是Java的工作原理。 generics仅在编译期间可用。
当实例化generics类型时,编译器通过称为类型擦除的技术来转换这些类型 – 这是一种编译器删除与类型参数相关的所有信息并在类或方法中键入参数的过程。 类型擦除使得使用generics的Java应用程序能够维护与generics之前创建的Java库和应用程序的二进制兼容性。
java编译器“擦除”类型参数。 所以List
和List
在类型擦除后变为List
(事实上是相同的签名):
public MyList (List list) { // ... }
您可以将类型添加为参数:
public MyList (List> list, int type) { // ... }
或者可能
public MyList (List> list, Class> clazz) { // ... }
或者向类添加类型参数
class MyList { public MyList (List custom2, Class clazz) { // ... } }