gpt4 book ai didi

用于类的不存在属性的Java getter

转载 作者:行者123 更新时间:2023-11-29 06:42:38 25 4
gpt4 key购买 nike

我在 Java 中使用了一些我不太了解的功能,所以我想阅读它以便更有效地使用它。问题是我不知道它叫什么,所以很难获得更多信息:

我有一个类 Foo 定义如下:

private String _name;
private Bar _bar;
//getters and setters

:

private String _code;

//getters and setters

public String get_isCodeSmith()
{
boolean rVal = _code.toLowerCase().contains("smith");
return rVal;
}

不知何故,在我的 JSP 页面中(当我有一个名为 FooSession 变量时)我能够编写这样的逻辑标记:

<logic:equal name="Foo" property="_bar._isCodeSmith" value="true">

即使在我的类 Bar 中没有属性 _isCodeSmith,它也会自动运行 get_isCodeSmith() 方法。

这叫什么,我在哪里可以找到更多信息?

最佳答案

这是 Javabeans mechanism .属性不是由字段标识的,而是由 getter(访问器)和/或 setter(修改器)方法标识的。

有关更多技术信息,请阅读 JavaBeans spec

或者看看这个简单的测试类:

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)

关于用于类的不存在属性的Java getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com