gpt4 book ai didi

java - 如何通过反射获取对象中的字段?

转载 作者:IT老高 更新时间:2023-10-28 13:52:45 24 4
gpt4 key购买 nike

我在 Java 中有一个对象(基本上是一个 VO),但我不知道它的类型。
我需要获取该对象中不为空的值。

如何做到这一点?

最佳答案

您可以使用 Class#getDeclaredFields()获取类的所有声明字段。您可以使用Field#get()获取值(value)。

简而言之:

Object someObject = getItSomehow();
for (Field field : someObject.getClass().getDeclaredFields()) {
field.setAccessible(true); // You might want to set modifier to public first.
Object value = field.get(someObject);
if (value != null) {
System.out.println(field.getName() + "=" + value);
}
}

要了解有关反射的更多信息,请查看 Oracle tutorial on the subject .

也就是说,如果该 VO 是一个完全有值(value)的 Javabean,那么这些字段不一定代表 VO 的真实属性。您希望确定以 getis 开头的公共(public)方法,然后调用它来获取真实属性值。

for (Method method : someObject.getClass().getDeclaredMethods()) {
if (Modifier.isPublic(method.getModifiers())
&& method.getParameterTypes().length == 0
&& method.getReturnType() != void.class
&& (method.getName().startsWith("get") || method.getName().startsWith("is"))
) {
Object value = method.invoke(someObject);
if (value != null) {
System.out.println(method.getName() + "=" + value);
}
}
}

反过来说,可能有更优雅的方法来解决您的实际问题。如果您详细说明您认为这是正确解决方案的功能需求,那么我们可能会提出正确的解决方案。有许多,许多 工具可用于按摩 javabean。 Java SE 在 java.beans 中甚至提供了一个内置的包。

BeanInfo beanInfo = Introspector.getBeanInfo(someObject.getClass());
for (PropertyDescriptor property : beanInfo.getPropertyDescriptors()) {
Method getter = property.getReadMethod();
if (getter != null) {
Object value = getter.invoke(someObject);
if (value != null) {
System.out.println(property.getName() + "=" + value);
}
}
}

关于java - 如何通过反射获取对象中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989560/

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