因此,我在转换为未知(在运行时)泛型方法参数时遇到了问题。
ValueDescription<?> valueDesc = /* get the value description */;
Object value = /* get the value */;
valueDesc.gotAValue(valueDesc.getType().cast(value));
抽象类 ValueDescription 如下所示:
public abstract class ValueDescription<T> {
public abstract Class<T> getType();
public void gotAValue(final T value) {
// do something
}
}
Eclipse 总是给出以下错误:
ValueDescription 类型中的方法 gotAValue(capture#1-of ?) 不适用于参数 (capture#2-of ?)
是否有可能做这样的事情?
最佳答案
将此代码放入通用方法中:
<T> void doStuff(ValueDescription<T> valueDesc) {
Object value = /* get the value */;
valueDesc.gotAValue(valueDesc.getType().cast(value));
}
这使得编译器知道 getType()
和 gotAValue
“?
” 是相同的类型,即使您不这样做不直接知道T
:
ValueDescription<?> valueDesc = /* get the value description */;
doStuff(valueDesc); // Fine, even though you've only got ?.
关于java - 转换为编译时未知的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906316/