我可以定义setter方法以返回此方法而不是void吗?
喜欢:
ClassA setItem1() { return this; } ClassA setItem2() { return this; }
然后我可以使用新的ClassA()。setItem1()。setItem2()
关于JavaBeans规范有很多误解。
它存在的主要原因是统一的Java“组件”模型。这是一种使用反射与Java对象进行编程交互的方式。该API本身名为JavaBeans Introspection。请看一下示例用法,您将比普通Java程序员了解更多。
自省API可用于以统一的方式操作GUI元素。您的组件将其属性公开为一对getter和setter,以便可以在运行时在GUI构建器的属性表上对其进行发现和操作。
因此,我认为混合使用流畅的API和JavaBeans Spec是不可行的。那是两个完全不相关的概念,并且可以互相干扰。当方法签名不同(返回类型)时,JavaBeans自省可能不起作用。
看一下这个例子(摘自链接教程):
public class SimpleBean { private final String name = "SimpleBean"; private int size; public String getName() { return this.name; } public int getSize() { return this.size; } public void setSize( int size ) { this.size = size; } public static void main( String[] args ) throws IntrospectionException { BeanInfo info = Introspector.getBeanInfo( SimpleBean.class ); for ( PropertyDescriptor pd : info.getPropertyDescriptors() ) System.out.println( pd.getName() ); } }
本示例创建一个非可视Bean并显示从BeanInfo对象派生的以下属性:
您可能想看看将void返回类型更改为其他任何类型时会发生什么。我这样做了,结果是一样的。那么,这是否意味着它被允许?
void
恐怕不行。JavaBeans规范对这些方法签名非常严格。碰巧的是实现是宽容的。但是,我不建议将流利的接口与JavaBeans混合使用。您不能真正依靠它,如果发现现在可行,将来也将如此。
但是,从另一方面看,您似乎没有充分使用JavaBean。只有getter / setter方法对。如何实现和设计API取决于您。