有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    在严格的JavaBeans中,这是一个有效的名称(请参阅@TheeleteGentlest的答案)

    但是,请确保您没有这样做:

    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;
        }
    }
    

    但话说回来,你真的在做独轮车的模特吗?;-)

  2. # 2 楼答案

    我不得不不同意。我问了同样的问题,写了一个快速测试

    假设JavaBean是:

    package example;
    
    public class FooBean {
    
        private Boolean published;
    
        public void setPublished(Boolean published) {
            this.published = published;
        }
    
        public Boolean isPublished() {
            return published;
        }
    
    }
    

    还有一个看起来像:

    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()
    
  3. # 3 楼答案

    在JavaBeans中,boolean的getter方法可以是getXXX()isXXX()。由于Boolean不是基元类型,因此需要getXXX()isXXX()仅适用于布尔基元类型(感谢@Kemoda)

    请参阅section 8.3.2 of the JavaBeans Specification