JavaBean到底是什么?

我认为,我明白,“Bean”是一个Java类,具有属性和getters/setters。
据我所知,它相当于C 。这是真的吗?struct

另外,a和正则之间是否存在真正的语法差异?
是否有任何特殊定义或?JavaBeanclassInterface

基本上,为什么有一个术语?

另外,界面是什么意思?Serializable


答案 1

JavaBean只是一个标准。它是一个普通的Java,除了它遵循某些约定:class

  1. 所有属性都是私有的(使用 getters/setters)
  2. 公共无参数构造函数
  3. 实现可序列化

就是这样。这只是一个惯例。不过,许多图书馆都依赖于它。

关于 ,从 API 文档中可以看出Serializable

类的可序列化性由实现 java.io.Serializable 接口的类启用。不实现此接口的类将不会序列化或反序列化其任何状态。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

换句话说,可序列化的对象可以写入流,因此可以写入文件,对象数据库,实际上任何东西。

此外,JavaBean和另一个类之间没有语法上的区别 - 如果一个类遵循标准,那么它就是JavaBean。

它有一个术语,因为该标准允许库以编程方式使用您以预定义的方式定义的类实例执行操作。例如,如果一个库想要将你传递给它的任何对象进行流式处理,它知道它可以,因为你的对象是可序列化的(假设库要求你的对象是正确的JavaBeans)。


答案 2

有一个术语可以让它听起来很特别。现实远没有那么神秘。

基本上,一个“豆子”:

  • 是一个可序列化的对象(也就是说,它实现了java.io.Serializable,并且正确地做到了这一点),即
  • 具有“属性”,其 getter 和 setter 只是具有某些名称的方法(例如,是 “Foo” 属性的 getter),并且getFoo()
  • 具有公共零参数构造函数(因此可以随意创建它并通过设置其属性进行配置)。

至于:那只不过是一个“标记接口”(一个不声明任何函数的接口),它告诉Java实现类同意(并暗示它能够)“序列化” - 一个将实例转换为字节流的过程。这些字节可以存储在文件中,通过网络连接等发送,并且有足够的信息来允许JVM(至少是知道对象类型的JVM)稍后重建对象 - 可能在应用程序的不同实例中,甚至在整个其他机器上!Serializable

当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是,所有实例字段都必须是基元类型(int,bool等),也可以是也可以序列化的某个类的实例,或者标记为Java不会尝试包含它们。(这当然意味着田野不会在溪流上幸存下来。具有字段的类应准备好在必要时重新初始化这些字段。transienttransienttransient

一个不能遵守这些限制的类不应该实现(而且,IIRC,Java编译器甚至不会让它这样做。Serializable


推荐