gpt4 book ai didi

java - 如何使用 java bean 的参数化属性名称和类型列表

转载 作者:行者123 更新时间:2023-12-01 07:40:28 25 4
gpt4 key购买 nike

假设我有一颗 bean

public class SomeBean{
List<String> messages;
List<Integer> scores;
String id;
int number;

.... }

我正在使用以下代码来处理或转储属性

        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass, Object.class);
PropertyDescriptor descriptors[] = beanInfo.getPropertyDescriptors();
int stop = descriptors.length;
for (int i = 0; i < stop; ++i) {
PropertyDescriptor descriptor = descriptors[i];
logger.info(descriptor.getName() + " : " + descriptor.getPropertyType().getName() + ", writemethod :" + descriptor.getWriteMethod());

}

我希望能够获取“分数”和“消息”的参数化类型。当我破坏代码时,消息和分数的“descriptor.getPropertyType().getName()”的值都是“java.util.List”。

如何判断“message”的属性描述符是否引用 List<String>对于“分数”,指的是 List<Integer>

最佳答案

有两种情况。

第一种情况是编译时未知属性的参数化类型:

public class Pair<A, B> {
public A getFirst() { ... }
public B getSecond() { ... }
}

在这种情况下,您无法在编译时知道,这就是 @darioo 所说的。

第二种情况是您的情况,即属性的类型参数在运行时已知。下面的代码应该可以帮助您准确地弄清楚您想要做什么:

BeanInfo beanInfo = Introspector.getBeanInfo(beanClass, Object.class);
PropertyDescriptor descriptors[] = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor d : descriptors) {
final Type type = d.getReadMethod().getGenericReturnType();
if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type;
System.out.println(d.getDisplayName());
for (Type atp : pt.getActualTypeArguments()) {
System.out.println(" " + atp);
}
}
}

这里的关键是获取读或写方法,分别使用 API Method.getGenericReturnType()Method.getParameterTypes()

请注意,处理java.lang.reflect.Type通常会变得相当乏味/棘手,例如考虑一下:

public Map<Nation, Map<A extends PostCode, B extends Location>> getGlobalPostCodes() { ... }

关于java - 如何使用 java bean 的参数化属性名称和类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640058/

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