gpt4 book ai didi

java - "both methods have same erasure"使用有界类型参数时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:14 26 4
gpt4 key购买 nike

我第一次在 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){}

我得到这个错误:两种方法都具有相同的删除

如果这是一个愚蠢的问题,我很抱歉,但我不明白为什么有界类型参数声明中的接口(interface)顺序似乎很重要。实际上,我不认为是顺序导致了错误,但我不明白是什么导致了错误。

我正在阅读 this documentation by Oracle ,它说我必须把类作为第一个参数,但 Aa、Bb 和 Cc 都是接口(interface)。对不起我的英语。

最佳答案

重要的是顺序(§4.6):

The erasure of a type variable (§4.4) is the erasure of its leftmost bound.

GenericBC 删除为 AaCc,具体取决于边界中哪个先出现(即最左边)。

另见 type erasure tutorialtype erasure, when and what happens Q&A用于一般类型删除的解释。

关于java - "both methods have same erasure"使用有界类型参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com