作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请帮助解决有关泛型的问题。我尝试了很多方法但仍然不起作用。问题是:
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/
我是一名优秀的程序员,十分优秀!