0

我正在尝试通过其名称 memberName 访问 Object 对象的属性。

我试过:

new PropertyDescriptor(memberName,object.getClass()).getReadMethod().invoke(object);

它适用于我的对象的大多数属性。但其中一些是布尔值,getter 的形式是“isValid”而不是“getValid”,上面的代码会产生 IntrospectionException 错误。

如果可能的话,在不使用更多代码/外部库的情况下,我能做些什么来完成这项工作?


编辑 :

是的,对不起,我忘了提到我班成员的名字可能选得不好。它已经是 'boolean isValid' 并且 getter 也是 'isValid'。

4

2 回答 2

2

它对我来说很好用,并且有记录表明这就是它的工作方式:

通过具有 getFoo 和 setFoo 访问器方法,为遵循标准 Java 约定的属性构造 PropertyDescriptor。因此,如果参数名称是“fred”,它将假定编写器方法是“setFred”,而读取器方法是“getFred” (或布尔属性的“isFred”)。请注意,属性名称应以小写字符开头,在方法名称中将大写。

(强调我的。)

示例代码:

import java.beans.*;

public class Test {

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        PropertyDescriptor pd = new PropertyDescriptor("checked", Test.class);
        System.out.println(pd.getReadMethod().invoke(test));
    }

    public boolean isChecked() {
        System.out.println("isChecked called!");
        return true;
    }

    public void setChecked(boolean checked) {
    }
}

我建议你试试我的示例代码,如果这对你有用,那么看看你是否能找到我的代码和你的代码之间的区别。

于 2013-03-07T14:26:59.497 回答
0

如果您要访问的属性是公开的,您可以执行以下操作

object.getClass().getDeclaredField(name)

如果该属性是私有的,您可以通过以下方式访问它:

object.getClass().getDeclaredField(name).setAccessible(true);   object.getClass().getDeclaredField(name);
于 2013-03-07T14:27:09.173 回答