关于java:除了getter和setter之外,JavaBean还能有方法吗?

Can a JavaBean have methods besides getters and setters?

根据我在Internet中发现的定义,JavaBean是满足这些条件的Java类:

  • 所有实例属性都是私有的
  • 所有实例属性都有公共的getter和setter
  • 类具有无参数构造函数
  • 类实现可序列化接口

我想知道的是,如果我向JavaBean添加方法,我们还可以称它为JavaBean吗?

例如,我们可以说下面的类是JavaBean吗?

1
2
3
4
5
6
7
public class Person implements Serializable {
    private String name;
    public Person(){}
    public String getName(){...}
    public void setName(String name){...}
    public void sayHello(){}
}


是的,Java bean肯定有行为。没有附加方法的Java bean类具有非常有限的适用性,因为它们封装了缺乏有用行为的数据。

Oracle在Java bean中的一个教程中提到了这一点:

A bean's methods are the things it can do. Any public method that is not part of a property definition is a bean method. When you use a bean in the context of a builder tool like NetBeans, you can use a bean's methods as part of your application. For example, you could wire a button press to call one of your bean's methods.


是的,Java bean可以有附加的功能。该约定被引入以结构化方式访问属性并添加否决等功能。例如,它用于Swing中的GUI组件,其中bean机制用于配置GUI元素。尤其是在GUI编辑器中,需要动态访问未知属性。当然,这些GUI组件有很多功能。如果限制到一组条件,您得到的是一个DTO(数据传输对象),它只传输数据,但没有附加功能。