【发布时间】:2015-12-04 14:14:28
【问题描述】:
下面的代码是一个可以轻松重现问题的小示例。所以我有一个字符串类型的变量,在它上面设置了一个默认值。我有 3 种方法:
- 吸气剂
- 二传手
- 将字符串转换为布尔值的便捷方法
自省不会将 getter 作为 readMethod 并将 setter 作为 writeMethod 返回。相反,它返回 isTest() 方法作为 readMethod。设置器为空。
从文档中我了解到,如果类型是布尔值,则“is”方法的优先级高于 get,但类型是 String,因此即使查找“is-xxx”也没有意义方法?
public class Test {
public class Arguments {
private String test = Boolean.toString(true);
public boolean isTest() {
return Boolean.parseBoolean(test);
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(Arguments.class);
System.out.println("Getter: " + info.getPropertyDescriptors()[1].getReadMethod());
System.out.println("Setter: " + info.getPropertyDescriptors()[1].getWriteMethod());
PropertyDescriptor descr = new PropertyDescriptor("test", Arguments.class);
System.out.println("T");
}
}
有没有人对此有所了解?
附加信息:
- 订单不会改变结果。 isTest() 方法始终被视为 readMethod
- 如果我只是将 isTest() 重命名为 bsTest(),它会选择 getter 和 setter 作为 readMethod 和 writeMethod。所以它与“is-xxx”有关。
【问题讨论】:
-
如果在类的末尾声明
isTest方法会发生什么?它可能被识别为布尔值,因为这是第一次出现,因此 setter 与 String 类型不匹配。 -
不,这没有意义,但显然这是他们决定的(或者这是一个错误)。你对此无能为力,除了停下来用字符串表示布尔值:D
-
我在初始文本中添加了更多信息。顺序对结果没有影响。
标签: java javabeans introspection