编写JavaBean类的正确规则是什么?
我很困惑,因为有些书必须使用,而其他用户应该或者可以描述 写作规则:
即。
答案 0 :(得分:7)
JavaBean由其属性(即其getter和setter方法)定义,而不是 fields 。尽管这些术语可以互换使用,但实际上并不正确。 Introspector
机制完全忽略了字段。
示例强>
拿这个(设计得很好)Javabean:
public class TestBean {
private int baz;
private char[] phleem;
public String getFoo() {
return new String(phleem);
}
public void setFoo(final String foo) {
this.phleem = foo.toCharArray();
}
public long getBar() {
return baz;
}
public void setBar(final long bar) {
this.baz = (int) bar;
}
}
您认为属性是:
int
)char[]
)但现在让我们用Javabeans introspector检查它:
for (PropertyDescriptor descriptor : Introspector
.getBeanInfo(TestBean.class, Object.class)
.getPropertyDescriptors()) {
System.out.println("Name: " + descriptor.getName() +
", type: " + descriptor.getPropertyType());
}
这是输出:
Name: bar, type: long
Name: foo, type: class java.lang.String
结论:
Getters和setter定义了Javabeans属性。它是一个约定,它们由具有相同名称和类型的字段支持,但这些字段实际上并不是Javabean属性的一部分(尽管许多文档会另有说明)。
重新阅读我的答案:这是对其他答案的补充。如果你想要一个简短的答案,请选择skaffman's。
答案 1 :(得分:2)
这是一个公共课。
它有一个公共无参数构造函数(尽管它可能有其他构造函数 ()
它实现了Serializable接口(即它可以是持久的,因此它的状态可以 被保存)
它具有以下命名的“getter”和“setter”方法的属性 JavaBeans命名模式
它具有遵循标准Java事件模型并具有注册的事件 遵循JavaBeans命名模式命名的方法
可能有其他方法不遵循命名模式。这些 方法不会被构建器工具公开。
答案 2 :(得分:1)
添加到上一张海报 - skaffman。覆盖toString()
,hashCode()
,equals()
并最终编写一个包含所有字段(此类具有的)作为输入的重载构造函数始终是一种好习惯。
请确保不要在toString()
和hashCode()
的实现中使用其他引用(例如List,HashMaps等)。
另一方面,eclipse具有为您生成它们的内置功能..
答案 3 :(得分:1)
Java Bean是一个Java类,应遵循以下约定:
Serializable
。getter
和setter
方法。答案 4 :(得分:0)
以上所有内容都不应跨越Java API的界限。这意味着它不应该扩展或实现任何类或接口,但只有一种放松,它只能实现一个可序列化的interfce,因为它是一个标记接口