这个方法签名有效吗?
public Boolean isBikeTyreFlat(){}
请注意,我试图在这里返回一个 Object 而不是原语。
谢谢 :)
在 JavaBeans 中,getter 方法boolean
可以是getXXX()
或isXXX()
。由于Boolean
不是原始类型,因此 agetXXX()
是必需的。isXXX()
仅适用于布尔原始类型(感谢@Kemoda)。
在严格的 JavaBeans 中,这是一个有效的名称(参见@TheEliteGentleman 的答案)。
但是,请确保您没有做这样的事情:
public class BikeTyre {
private boolean flat;
public Boolean isBikeTyreFlat() {
return flat;
}
}
不建议这样做,因为您的字段名称与方法名称不匹配。一些框架允许向 Java Bean 的内部字段和 getter/setter 添加注解;不匹配可能会混淆这些框架。另请注意,将类名添加到您的字段是不好的做法;你的方法应该只是isFlat()
.
当然,这是完全有效的:
public class Unicycle {
private boolean bikeTyreFlat;
public Boolean isBikeTyreFlat() {
return bikeTyreFlat;
}
}
但话又说回来,你真的在为独轮车建模吗?;-)
我不得不不同意这个答案。我有同样的问题并写了一个快速测试。
给定 JavaBean 为:
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public Boolean isPublished() {
return published;
}
}
和一个看起来像这样的 Main 类:
package example;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(FooBean.class);
} catch (IntrospectionException e) {
e.printStackTrace();
}
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor descriptor : propertyDescriptors){
System.out.println("descriptor: " + descriptor);
System.out.println("descriptor.getName(): " + descriptor.getName());
System.out.println("descriptor.getReadMethod(): " + descriptor.getReadMethod());
}
}
}
运行主类的结果是:
descriptor: java.beans.PropertyDescriptor@1e746992
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@c994fbad
descriptor.getName(): published
descriptor.getReadMethod(): null
如果我变成FooBean.java
这样:
package example;
public class FooBean {
private boolean published;
public void setPublished(boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
然后得到的输出是:
descriptor: java.beans.PropertyDescriptor@18072768
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@1e2ff4ad
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
这告诉我,要使其成为有效的 JavaBeans 签名,必须将类型声明为原始布尔值。
编辑 经过进一步测试,似乎只有声明的 isXxx() 方法的返回类型必须是布尔值,JavaBeans 才能识别它:
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
结果:
descriptor: java.beans.PropertyDescriptor@1e746992
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@f96377e5
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()