作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有这段 Java 代码:
public <A extends Action> List<A> getActionsFor(Actor a) {
List<A> theActions = super.getActionsFor(a);
for (Action ac: a.getItemCarried().getActions()) {
theActions.add(ac);
}
return theActions;
}
出于某种原因,javac 拒绝 .add(ac) 声称 add(A) 不能应用于 Action。
我是不是漏掉了一些关键的东西?我可以通过在两个包之间创建依赖关系来解决这个问题,但我真的不想这样做。
所有有问题的类都已正确导入,并且调用的每个方法都有效,所以我真的不知道为什么它不能接受 A 扩展的类类型。
任何建议,即使您不确定也将不胜感激,因为我必须在接下来的 6 小时内修复此问题,否则我将需要创建该依赖项。
最佳答案
Am I missing something key here?
A
是对 Action 的扩展,ac
也是对 Action 的扩展。不过这有点像设施
Yesterday I saw someone.
Someone is the President
Therefor, yesterday I was the President.
问题是编译器不知道 A
和 Action
是 Action
的兼容子类
一个简单的解决方法是不要那么具体。在此方法中使用 Action
而不是 A
。
public List<Action> getActionsFor(Actor a) {
// this has to return a copy of the List or you will be modifying an original
List<Action> theActions = super.getActionsFor(a);
for (Action ac: a.getItemCarried().getActions()) {
theActions.add(ac); // ac is an Action so all good.
}
return theActions;
}
或者你可以做你拥有的,但更复杂
public <A extends Action> List<A> getActionsFor(Actor<A> a) {
List<A> theActions = super.getActionsFor(a);
for (A ac: a.getItemCarried().getActions()) {
theActions.add(ac); // ac is an A, so all good.
}
return theActions;
}
关于java - 泛型在 Java 中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23423226/
我是一名优秀的程序员,十分优秀!