我在Java中有一个对象(基本上是VO),但不知道其类型。
我需要获取在该对象中不为null的值。
如何才能做到这一点?
你可以Class#getDeclaredFields()
用来获取该类的所有声明的字段。你可以Field#get()
用来获取价值。
简而言之:
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);
}
}
要了解有关反射的更多信息,请查看有关该主题的Sun教程。
就是说,这些字段不一定全部代表VO的属性。你希望确定以get
或开头的公共方法is
,然后调用它以获取真实属性值。
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);
}
}
}
也就是说,可能会有更优雅的方法来解决你的实际问题。如果你详细介绍了认为这是正确解决方案的功能要求,那么我们也许可以提出正确的解决方案。有很多很多工具可以按摩Javabeans。
我有一个方法,它返回字符串类型的字段对象列表。 这个方法应该将所有字符串字段都大写: 问题是:"field.set(...)"不起作用。它应该将值大写并将其设置为该字段的新值,但它不起作用...我如何解决这个问题的任何想法?(PS:在真正的代码中,"something Class.class"被设置为真正的类名...) 正在生成的错误是field.get(this)方法(insdefield.se
本文向大家介绍请说明如何通过反射获取和设置对象私有字段的值?相关面试题,主要包含被问及请说明如何通过反射获取和设置对象私有字段的值?时的应答技巧和注意事项,需要的朋友参考一下 考察点:类 可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值
我发现这是一个私人领域,没有直接的方法来获得它。有办法出去吗?我使用jdk7。tks前进。
问题内容: 我有一个方法: 当运行时,我得到如下输出: 现在我该怎样提取实际字符串值入, 使用反射? 问题答案: 看起来您需要引用该类的实例。您可能要调用get和pass的引用,将返回值转换为String。 您可以使用get,如下所示:
问题内容: 我有以下实体: 还有以下EJB: 调用persist时,将引发具有以下根本原因的异常: 这是GlassFish 4.1的完整日志: 这是怎么引起的,我该如何解决? 问题答案: 我有同样的问题。这个错误似乎是从HB 4.3.6开始的,并且一直存在,我正在尝试4.3.10。具有相同的结果。 在我看来,访问实体字段的方式在HB 4.3.6+中已更改,可能与类加载器有关。在HB 4.3.6之前
问题内容: 我正在尝试获取对象的第一个父项的字段和值。我当前的代码是这样的: 我的课程结构与此类似: 现在,我将一个C对象传递给该方法,并且我想从C和B中获取所有字段,而不是从A中获取所有字段。有没有办法做到这一点(使用反射,我不想实现其他方法)? 问题答案: Luchian,使用getSuperclass()方法获取对Class对象的引用,该对象表示所讨论对象的超类类型。之后,您可以像在示例中一