我希望构造函数测试getFieldName()和isFieldName()getter。为什么IS_PREFIX是默认前缀?
我使用Java 1.8.0_31_b13。
我如何使用它:
import java.util.*;
import java.lang.*;
import java.io.*;
import java.beans.PropertyDescriptor;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
class Foo { String bar; public String getBar(){return bar;} public void setBar(String b){this.bar=b;} }
public static void main (String[] args) throws java.lang.Exception
{
java.beans.PropertyDescriptor p = new java.beans.PropertyDescriptor("bar", Foo.class);
System.out.println(p.getReadMethod().getName()); // prints getBar, not consistent with source code
}
}
代码打印getBar
,但我不明白为什么。
答案 0 :(得分:4)
代码打印getBar,但我不知道为什么。
javadoc陈述
为后面的属性构造
object
具有PropertyDescriptor
和getFoo
访问器方法的标准Java约定。 因此,如果参数名称是" fred",它将假定作者 方法为setFoo
,读者方法为setFred
(或getFred
对于isFred
属性。)
您已提供boolean
propertyName
,您的班级有一个名为bar
的无障碍访问者,这是他们返回的内容。
我希望构造函数测试getFieldName()和 isFieldName()getters。为什么IS_PREFIX是默认前缀?
您可以访问我们去的兔子洞的源代码。具体来说,请查看getReadMethod
方法的逻辑。如果找到具有getBar
前缀的getter,则在该方法中覆盖构造函数中设置的前缀。
提前更改问题:
您的访问者和变异者不是get
。 PropertyDescriptor
首先尝试使用public
/ public
前缀(遵循约定)查找get
getter / setter,然后使用set
尝试is
}属性。错误消息只是告诉你它尝试过的最后一件事。
制作您的媒体资源boolean
。