阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

JavaBean

32次阅读
没有评论

共计 2176 个字符,预计需要花费 6 分钟才能阅读完成。

在 Java 中,有很多 class 的定义都符合这样的规范:

  • 若干 private 实例字段;
  • 通过 public 方法来读写实例字段。

例如:

public class Person {private String name;
    private int age;

    public String getName() {return this.name; }
    public void setName(String name) {this.name = name; }

    public int getAge() {return this.age; }
    public void setAge(int age) {this.age = age; }
}

如果读写方法符合以下这种命名规范:

// 读方法:
public Type getXyz()
// 写方法:
public void setXyz(Type value)

那么这种 class 被称为JavaBean

JavaBean

上面的字段是 xyz,那么读写方法名分别以getset开头,并且后接大写字母开头的字段名 Xyz,因此两个读写方法名分别是getXyz()setXyz()

boolean字段比较特殊,它的读方法一般命名为isXyz()

// 读方法:
public boolean isChild()
// 写方法:
public void setChild(boolean value)

我们通常把一组对应的读方法(getter)和写方法(setter)称为属性(property)。例如,name属性:

  • 对应的读方法是String getName()
  • 对应的写方法是setName(String)

只有 getter 的属性称为只读属性(read-only),例如,定义一个 age 只读属性:

  • 对应的读方法是int getAge()
  • 无对应的写方法setAge(int)

类似的,只有 setter 的属性称为只写属性(write-only)。

很明显,只读属性很常见,只写属性不常见。

属性只需要定义 gettersetter方法,不一定需要对应的字段。例如,child只读属性定义如下:

public class Person {private String name;
    private int age;

    public String getName() {return this.name; }
    public void setName(String name) {this.name = name; }

    public int getAge() {return this.age; }
    public void setAge(int age) {this.age = age; }

    public boolean isChild() {return age <= 6;
    }
}

可以看出,gettersetter 也是一种数据封装的方法。

JavaBean 的作用

JavaBean 主要用来传递数据,即把一组数据组合成一个 JavaBean 便于传输。此外,JavaBean 可以方便地被 IDE 工具分析,生成读写属性的代码,主要用在图形界面的可视化设计中。

通过 IDE,可以快速生成 gettersetter。例如,在 Eclipse 中,先输入以下代码:

public class Person {private String name;
    private int age;
}

然后,点击右键,在弹出的菜单中选择“Source”,“Generate Getters and Setters”,在弹出的对话框中选中需要生成 gettersetter方法的字段,点击确定即可由 IDE 自动完成所有方法代码。

枚举 JavaBean 属性

要枚举一个 JavaBean 的所有属性,可以直接使用 Java 核心库提供的Introspector

import java.beans.*;

public class Main {public static void main(String[] args) throws Exception {BeanInfo info = Introspector.getBeanInfo(Person.class);
        for (PropertyDescriptor pd : info.getPropertyDescriptors()) {System.out.println(pd.getName());
            System.out.println(" " + pd.getReadMethod());
            System.out.println(" " + pd.getWriteMethod());
        }
    }
}

class Person {private String name;
    private int age;

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }
}

运行上述代码,可以列出所有的属性,以及对应的读写方法。注意 class 属性是从 Object 继承的 getClass() 方法带来的。

小结

JavaBean 是一种符合命名规范的 class,它通过gettersetter来定义属性;

属性是一种通用的叫法,并非 Java 语法规定;

可以利用 IDE 快速生成 gettersetter

使用 Introspector.getBeanInfo() 可以获取属性列表。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计2176字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中