当前位置: 首页 > 面试题库 >

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

洪昊然
2023-03-14
问题内容

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

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

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



 类似资料:
  • 我试图检查在哪里失去了准确表示大整数的能力。所以我写了这个小片段: 这段代码似乎适用于所有编译器,除了clang。Clang生成一个简单的无限循环。戈德博尔特。 这是允许的吗?如果是,这是QoI问题吗?

  • 我读到了关于和的相互矛盾的语句。 这个答案说: 使用must-revalidate时,如果服务器不响应重新验证请求,浏览器/代理应该返回504错误。在没有缓存的情况下,它只显示缓存的内容 然而,“只显示缓存的内容”而不进行重新验证与https://datatracker.ietf.org/doc/html/RFC7234#section-5.2.1.4中的内容相矛盾: “no-cache”requ

  • 考虑以下代码: 我得到了错误 on-但我真的希望能够将类型检查移动到此函数中,因为这减少了我必须将类型检查到一个位置的次数。

  • 问题内容: 我已经看完了这个演讲。 幻灯片编号:26引用 这些说法正确吗? 如果两个语句都正确,那么如何使代码可编译,以便jvm运行代码? 提前致谢。 问题答案: 这些说法是完全正确的。 请记住,Java是两件事- 一是语言,其二是虚拟机。尽管将语言限制为不允许基于类型的方法重载使Java成为一种更简单的语言,但JVM仍可以允许这样做以使其更强大。 作为一种语言,Java具有一种编译器,该编译器执

  • 问题内容: 我正在用Go / Objective-C编写Mac OS应用程序。可以说,我没有使用Xcode,而是手工组装了应用程序捆绑包。这是文件系统层次结构的样子 该捆绑包可以正常启动。应用程序按预期工作。我的Plist文件中有一个CFBundleURLTypes字典,该字典为我的应用程序定义了URL方案。 (注意:类似“ MyApp”。它不是Java样式的反向DNS名称字符串。) 当我单击Sa