Java getter用于类的不存在的属性
我在Java中使用了一些我并不理解的function,因此我想阅读它以便我可以更有效地使用它。 问题是我不知道它叫什么,因此很难获得更多信息:
我有一个类Foo
定义如下:
private String _name; private Bar _bar; //getters and setters
和Bar
:
private String _code; //getters and setters public String get_isCodeSmith() { boolean rVal = _code.toLowerCase().contains("smith"); return rVal; }
不知何故,在我的JSP页面中(当我有一个名为Foo
的Session
变量时)我能够编写如下逻辑标记:
即使我的类Bar
没有属性_isCodeSmith
,它get_isCodeSmith()
自动运行get_isCodeSmith()
方法。
这叫什么,我在哪里可以找到更多?
这是Javabeans机制 。 属性不是由字段标识,而是由getter(访问器)和/或setter(mutator)方法标识。
有关更多技术信息,请阅读JavaBeans规范
或者看看这个简单的测试类:
public class TestBean { private String complete; public String getComplete() { return complete; } public void setComplete(final String complete) { this.complete = complete; } private String getterOnly; public String getGetterOnly() { return getterOnly; } private String setterOnly; public void setSetterOnly(final String setterOnly) { this.setterOnly = setterOnly; } public String getNoBackingField() { return ""; } }
和简单的JavaBeans分析:
public class Test { public static void analyzeBeanProperties(final Class> clazz) throws Exception { for (final PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors()) { System.out.println("Property name: " + propertyDescriptor.getName()); System.out.println("Getter method: " + propertyDescriptor.getReadMethod()); System.out.println("Setter method: " + propertyDescriptor.getWriteMethod()); System.out.println(); } } public static void main(final String[] args) throws Exception { analyzeBeanProperties(TestBean.class); } }
输出:
Property name: complete Getter method: public java.lang.String test.bean.TestBean.getComplete() Setter method: public void test.bean.TestBean.setComplete(java.lang.String) Property name: getterOnly Getter method: public java.lang.String test.bean.TestBean.getGetterOnly() Setter method: null Property name: noBackingField Getter method: public java.lang.String test.bean.TestBean.getNoBackingField() Setter method: null Property name: setterOnly Getter method: null Setter method: public void test.bean.TestBean.setSetterOnly(java.lang.String)
表示Foo.getA()。getB()。getC()
如果字段存在则无关紧要。 只有吸气剂是强制性的。