gpt4 book ai didi

java - 从 Jackson TypeReference 获取类

转载 作者:行者123 更新时间:2023-11-29 03:12:24 28 4
gpt4 key购买 nike

我有一些代码需要取消选择 Jackson TypeReference 以确定它是否是一个集合。目前我能想到的最好的办法是:

// Sample type reference - in reality this is an argument to the method
final TypeReference<List<String>> typeRef = new TypeReference<List<String>>(){};

// Obtain the Java reflection type from the TypeReference
final Type type = typeRef.getType() instanceof ParameterizedType ? ((ParameterizedType)typeRef.getType()).getRawType() : typeRef.getType();

// Obtain the name of the class (or interface)
final String typeName = type.toString().replace("class ", "").replace("interface ", "");

// And find out if it is a Collection
final boolean isCollection = Collection.class.isAssignableFrom(Class.forName(typeName));

但我希望有一种方法可以在不进行字符串操作的情况下做到这一点。是否有更好的方法从 Java Type 转到 Class,或者直接从 TypeReference 检查可分配性>输入?

这需要在 Android 上运行,因此无法使用 Java 8 中添加的任何功能。

最佳答案

根据你的代码行,

final Type type = typeRef.getType() instanceof ParameterizedType ? ((ParameterizedType)typeRef.getType()).getRawType() : typeRef.getType();

你可以像这样安全地将它转换为一个类

final Class clazz = (Class)(typeRef.getType() instanceof ParameterizedType ? ((ParameterizedType)typeRef.getType()).getRawType() : typeRef.getType());

添加更多解释 -

在第一个场景中(typeRef 是 ParameterizedType 的一个实例),您正在检索将是一个类的 rawType。

在第二种情况下(typeRef 不是 ParameterizedType 的实例),它仍然是一个常规类,因为它不是参数化的。

关于java - 从 Jackson TypeReference 获取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614404/

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