java - 转换为编译时未知的泛型类型

标签 java generics casting

因此,我在转换为未知(在运行时)泛型方法参数时遇到了问题。

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/

相关文章:

java - 使用 JSoup 进行屏幕抓取

java - 使用 Eclipse 和 CHD4 的 JDBC 连接到 Hive 时出错

generics - 具有 ifort 编译器的通用内部过程

ios - Swift 中的通用类继承

ios - 将 NSObject 转换为 double

java - 什么时候需要强制转换 'this'?

java - 使用tomcat时如何将文件保存在客户端电脑而不是服务器电脑上

java - 调用 Applet 方法 - Firefox 12 错误

c# - C# 中的 C++ 模板继承等效于什么?

将指针转换为左值