gpt4 book ai didi

java - 带有泛型的代码无法编译

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:51 25 4
gpt4 key购买 nike

我用谷歌搜索这个问题失败了。为什么这一行会产生编译错误。

wrapper.doSmth(wrapper.getCurrent());

我正在使用 Java 7。

public class App {
Wrapper<?> wrapper;

class Generic<T>{

}

class Wrapper<T>{
Generic<T> current;

public void doSmth(Generic<T> generic){
}

public Generic<T> getCurrent(){
return current;
}
}

public void operation(){
wrapper.doSmth(wrapper.getCurrent());
}
}

错误是:

Error:(25, 24) java: method doSmth in class App.Wrapper<T> cannot be applied to given types;
required: App.Generic<capture#1 of ?>
found: App.Generic<capture#2 of ?>
reason: actual argument App.Generic<capture#2 of ?> cannot be converted to conf.App.Generic<capture#1 of ?> by method invocation conversion

最佳答案

编译错误应该类似于“capture of ?#1 is not compatible with capture of ?#2”。这个错误的原因是 wrapperWrapper<?> .

编译器发现 wrapper.getCurrent()返回 Generic<?> ,那wrapper.doSmth需要 Generic<?>作为参数。但它不会等同于这两个 ?通配符,即使我们可以看到它们来自同一个实例并且应该是相同的。

这里的一个解决方案是制作 App类泛型,因此您可以替换通配符。

public class App<T> {

因为 GenericWrapper是内部类,T仍在范围内,因此您无需再为它们声明泛型类型参数。

    Wrapper wrapper;

class Generic{

}

class Wrapper{
Generic current;

public void doSmth(Generic generic){
}

public Generic getCurrent(){
return current;
}
}

public void operation(){
wrapper.doSmth(wrapper.getCurrent());
}
}

关于java - 带有泛型的代码无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307206/

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