gpt4 book ai didi

java - 方法具有(意外地)与另一个方法相同的删除

转载 作者:行者123 更新时间:2023-11-30 11:42:22 25 4
gpt4 key购买 nike

我阅读了有关此的所有其他问题,但我不明白为什么在我的案例中存在类型删除。我有

public <T extends Aclass&Binterface> boolean test(final T param) {
...
}

public boolean test(final Aclass pOtherPPShape) {
...
}

方法 test(Aclass) 与类型 ClassName 中的另一个方法具有相同的删除测试(Aclass)

我应该如何编写两个在同一个类上运行的方法,一个有接口(interface),一个没有? (我无法修改 AClass,因为它来自外部库,并且有很多子类型可以使用此代码)

在这种情况下使用 instanceof 是否正确?

编辑:我在碰撞测试中使用它。如果传递的形状是接口(interface)的实例,我会得到一个碰撞掩码(使用接口(interface)的方法)然后调用“检查器”,如果不是,我想实例化一个虚拟碰撞掩码来做一些不同的事情并传递给“检查器”的相同方法(具有 2 个形状和 2 个 collisonmasks 作为参数)

最佳答案

您已经认识到问题与类型删除有关,并且您不能以这种方式“重载”带有类型删除的一个参数(类型删除 - 你将被模拟)。但是,你说,

泛型类型签名不同,为什么会发生冲突?

两种类型T extends Aclass&BinterfaceAclass是截然不同的,不是吗?

好吧,是的,不是。虽然实际上它们是不同的,但在类型删除下它们并不不同**1。一个优秀的资源说明:“In the process of type erasure the compiler replaces type parameters by their leftmost bound ”。在你的情况下是 Aclass ,这就导致了两种方法的冲突。

解释表明...

解决方案:形式化组合**2泛型类型声明以建立唯一的最左边界

替换<T extends Aclass&Binterface><T extends AandB> , 其中AandB是这样创建的:

  1. 定义 interface AinterfaceAclass方法签名

  2. Aclass implement Ainterface

  3. 定义 interface AandB extends Ainterface, Binterface .

你可以使用instanceof .


**1 “因为较长的波长会被大气中的粒子折射”,根据 Duncan Jones 的说法,这是另一个优秀的资源。

**2 那是 compound , 因为我无法抗拒乐趣 :-/

关于java - 方法具有(意外地)与另一个方法相同的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11747717/

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