Java 如何制作<;T扩展E>;泛型类型参数是否包含?
我有一个界面:Java 如何制作<;T扩展E>;泛型类型参数是否包含?,java,generics,inheritance,Java,Generics,Inheritance,我有一个界面: /** * Getter for any values within the GameObject and it's subclasses. * Used as callback. * * Typical implementation would look like: * new ValueGetter<SummonerSpell, String> { * public String getValue(Summo
/**
* Getter for any values within the GameObject and it's subclasses.
* Used as callback.
*
* Typical implementation would look like:
* new ValueGetter<SummonerSpell, String> {
* public String getValue(SummonerSpell source) {
* return source.toString();
* }
* }
* @param <T>
* @param <V> Type of value retrieved
*/
public static interface ValueGetter<T extends GameObject, V> {
public V getValue(T source);
}
但是reader.getValue(o)
会导致编译器错误:
incompatible types: GameObject cannot be converted to T
where T,V are type-variables:
T extends GameObject declared in method <T,V>enumValues(ValueGetter<T,V>)
V extends Object declared in method <T,V>enumValues(ValueGetter<T,V>)
不兼容类型:游戏对象无法转换为T
其中T,V是类型变量:
T扩展方法enumValues(ValueGetter)中声明的游戏对象
V扩展方法enumValues(ValueGetter)中声明的对象
我的问题是图像:
T可能是游戏对象,也可能是游戏对象的子对象。假设子名称为NPCObject。 因此,您使用T作为NPCObject调用enumValues ValueGetter可能针对NPCObjects进行了优化,所以你不能用游戏对象来调用它!ValueGetter会怎么做 ValueGetter处理的是T(本例中为NPC项目)。类型
公共列表enumValues(列表列表,ValueGetter阅读器){
public <T extends GameObject, V> List<V> enumValues(List<T> list, ValueGetter<T, V> reader) {
List<V> vals = new ArrayList();
for(T o : list) {
vals.add(reader.getValue(o));
}
return vals;
}
List vals=new ArrayList();
对于(TO:列表){
vals.add(reader.getValue(o));
}
返回VAL;
}
我认为在Java中没有办法解决这个问题。一个建议是将包装器类型放在GameObject的顶部
public <T extends GameObject, V> List<V> enumValues(List<T> list, ValueGetter<T, V> reader) {
List<V> vals = new ArrayList();
for(T o : list) {
vals.add(reader.getValue(o));
}
return vals;
}