gpt4 book ai didi

java - 我应该如何使用 guava TypeToken 反射性地实例化参数化类型?

转载 作者:行者123 更新时间:2023-12-01 05:15:43 24 4
gpt4 key购买 nike

我的类 TypeRegisterer 允许客户端注册参数化类型(使用与 TypeRegisterer 相同的参数),然后使用其原始类型名称实例化它们。

我当前的解决方案有效,但我有一个未经检查的强制转换警告,我不确定忽略它是否安全。有更好的方法吗?

public class TypeRegisterer<T> {
private Map<String, TypeToken<? extends Base<T>>> registeredTypes;

public void registerType(TypeToken<? extends Base<T>> typeToken) {
registeredTypes.put(typeToken.getRawType().getSimpleName(), typeToken);
}

public Base<T> initType(String className, T feature) throws Exception {
// validation and exception handling removed for brevity
TypeToken<? extends Base<T>> ruleType = registeredTypes.get(className);

@SuppressWarnings("unchecked")
Class<? extends Base<T>> rawType = (Class<? extends Base<T>>) ruleType .getRawType();

return rawType.getConstructor().newInstance();
}
}

最佳答案

这没问题 - 参数化类型是用 type erasure 编译的,因此参数信息在运行时不可用。

运行时,Class<Base<T>> == Class<Base<Integer>> == Class<Base<Double>>等等,所以你的 rawType 引用的类对象变量足以实例化该类。

关于java - 我应该如何使用 guava TypeToken 反射性地实例化参数化类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com