小编典典

Java bean的安装程序是否允许返回此值?

java

我可以定义setter方法以返回此方法而不是void吗?

喜欢:

ClassA setItem1() {
      return this;
}

ClassA setItem2() {
      return this;
}

然后我可以使用新的ClassA()。setItem1()。setItem2()


阅读 211

收藏
2020-09-26

共1个答案

小编典典

关于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返回类型更改为其他任何类型时会发生什么。我这样做了,结果是一样的。那么,这是否意味着它被允许?

恐怕不行。JavaBeans规范对这些方法签名非常严格。碰巧的是实现是宽容的。但是,我不建议将流利的接口与JavaBeans混合使用。您不能真正依靠它,如果发现现在可行,将来也将如此。

但是,从另一方面看,您似乎没有充分使用JavaBean。只有getter / setter方法对。如何实现和设计API取决于您。

2020-09-26