gpt4 book ai didi

java - 无法在 java 中将类转换为泛型

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

请帮助解决有关泛型的问题。我尝试了很多方法但仍然不起作用。问题是:

public static void main(String[] args) {
Utils.execute(new TestAction(), new TestCallBack());
}

编译器显示错误:

The method execute(Action<?>, CallBack<?,Action<?>>) in the type Utils is not applicable for the arguments (ImplementClass.TestAction, ImplementClass.TestCallBack)

我的类(class)是:
Action 类:

public abstract class Action<R> {
public R getResult() {
return null;
}
}

TestAction 类是:

class TestAction extends Action<String> {
@Override
public String getResult() {
return super.getResult();
}
}

回调类是:

public interface CallBack<R, A extends Action<R>> {
public void onCall(A action);}

TestCallback 类是:

class TestCallBack implements CallBack<String, TestAction> {

@Override
public void onCall(TestAction action) {

}

}

Utils 类是:

public class Utils {
public static void execute(Action<?> action, CallBack<?, Action<?>> callback) {

}
}

非常感谢。

最佳答案

execute的第二个参数方法是CallBack<?, Action<?>> ,和Action这意味着 Action类本身及其子类是不允许的。你需要的是 - ? extends Action<?> ,这意味着 Action或其某些子类。

尝试更改方法签名 -

public static void execute(Action<?> action, CallBack<?, ? extends Action<?>> callback) {
<小时/>

注意:

泛型不是协变的。以如下方法为例 -

static void method(List<Object> l) {}

并且不允许如下调用 -

method(new ArrayList<String>());

关于java - 无法在 java 中将类转换为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20662250/

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