【发布时间】:2018-05-29 18:06:27
【问题描述】:
我第一次在 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){}
但这不是:
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){}
我得到这个错误:两种方法都有相同的擦除。
如果这是一个愚蠢的问题,我很抱歉,但我不明白为什么有界类型参数声明中接口的顺序 似乎 很重要。 实际上,我不认为是导致错误的顺序,但我不明白是什么原因。
我正在阅读this documentation by Oracle,它说我必须将类作为第一个参数,但 Aa、Bb 和 Cc 都是接口。也对不起我的英语。
【问题讨论】:
标签: java generics type-erasure