Lap*_*apo 8 java generics type-erasure
我第一次在Java中使用泛型,我面临一个我无法克服的问题:为什么这会编译:
public interface Aa{}
public interface Bb{}
public interface Cc{}
public static <GenericAB extends Aa & Bb>
void method(GenericAB myABobject1, GenericAB myABobject2){}
public static <GenericAB extends Aa & Bb, GenericCA extends Cc & Aa>
void method(GenericAB myAbobject, GenericCA myCAobject){}
Run Code Online (Sandbox Code Playgroud)
但这不是:
public interface Aa{}
public interface Bb{}
public interface Cc{}
public static <GenericAB extends Aa & Bb>
void method(GenericAB myABobject1, GenericAB myABobject2){}
public static <GenericAB extends Aa & Bb, GenericAC extends Aa & Cc>
void method(GenericAB myAbobject, GenericAC myACobject){}
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:两种方法都有相同的擦除.
如果这是一个愚蠢的问题,我很抱歉,但我不明白为什么有界类型参数声明中的接口顺序似乎很重要.实际上我不认为这是导致错误的顺序,但我不知道是什么.
我正在阅读Oracle的这篇文档,它说我必须将该类作为第一个参数,但Aa,Bb和Cc都是接口.对不起,我的英文也是.
重要的是顺序(\xc2\xa74.6):
\n\n\n\n\n类型变量 (\xc2\xa74.4) 的擦除是其最左边界的擦除。
\n
GenericBC擦除到Aa或Cc,具体取决于边界中第一个出现的(即最左边的)。
另请参阅类型擦除教程和类型擦除、何时以及发生什么问答,以了解类型擦除的一般说明。
\n| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |