gpt4 book ai didi

Java - 重写从外部类继承泛型的内部类时出现 'Name clash' 和 'constructor undefined' 错误

转载 作者:行者123 更新时间:2023-12-02 11:11:33 25 4
gpt4 key购买 nike

最近在一个项目中升级了eclipse和java版本,出现了一些错误。我尝试重现并发现以下设置导致使用 Java 1.8 的 Eclipse Oxigen.3a (4.7.3a) 中出现错误,而同样适用于 eclipse 3.7.2 和 Java 1.7

TestSomeObject.java:

package a;
public class TestSomeObject
{
}

TestGeneric.java:

package a;
public class TestGeneric<T>
{
T element;

protected class InnerGeneric
{
T innerElement;

public InnerGeneric() { }
}
}

TestA.java:

package a;

public class TestA extends TestGeneric<TestSomeObject>
{
public TestA(String a, String b) {}

public InnerA someMethod(String some, InnerGeneric inner)
{
return new InnerA(some, inner);
}

protected class InnerA
{
public InnerA(String a, InnerGeneric b) { }
}
}

TestB.java

package a;
import a.TestA;

public class TestB extends TestA
{
public TestB(String a, String b){
super(a,b);
}

public InnerA someMethod(String some, InnerGeneric inner)
{
return new InnerB(some, inner);
}

protected class InnerB extends InnerA
{
public InnerB(String a, InnerGeneric b)
{
super(a, b);
}
}
}

在类测试 B 中,我收到以下编译错误:

  1. 一些方法:Description Resource Path Location Type
    Name clash: The method someMethod(String, TestGeneric<TestSomeObject>.InnerGeneric) of type TestB has the same erasure as someMethod(String, TestGeneric<TestSomeObject>.InnerGeneric) of type TestA but does not override it TestB.java line 13 Java Problem
  2. 调用 super(a,b) 时:Description Resource Path Location Type
    The constructor TestA.InnerA(String, TestGeneric<TestSomeObject>.InnerGeneric) is undefined TestB.java line 22
    在此输入代码 Java Problem

在 eclipse 版本:3.7.2 和 Java 1.7 中,这有效。

这是为什么呢?我可以做什么来清除错误?

最佳答案

答案是,在方法签名中更精确地定义 InnerGeneric 类:

TestB.java:

package a;

public class TestB extends TestA
{
public TestB(String a, String b){
super(a,b);
}

public InnerA someMethod(String some, TestGeneric<TestSomeObject>.InnerGeneric inner)
{
return new InnerB(some, inner);
}

protected class InnerB extends InnerA
{
public InnerB(String a, TestGeneric<TestSomeObject>.InnerGeneric b)
{
super(a, b);
}
}
}

关于Java - 重写从外部类继承泛型的内部类时出现 'Name clash' 和 'constructor undefined' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580377/

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