我认为,我理解“Bean”是具有属性和 getter/setter 的 Java 类。
据我了解,它相当于 C struct
。真的吗?
此外, JavaBean
和常规 class
之间是否存在真正的 语法 差异?
是否有任何特殊定义或 Interface
?
基本上,为什么有这个术语?
还有 Serializable
接口是什么意思?
原文由 Amir Rachum 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为,我理解“Bean”是具有属性和 getter/setter 的 Java 类。
据我了解,它相当于 C struct
。真的吗?
此外, JavaBean
和常规 class
之间是否存在真正的 语法 差异?
是否有任何特殊定义或 Interface
?
基本上,为什么有这个术语?
还有 Serializable
接口是什么意思?
原文由 Amir Rachum 发布,翻译遵循 CC BY-SA 4.0 许可协议
有一个术语让它听起来很特别。现实远没有那么神秘。
基本上,一个“Bean”:
java.io.Serializable
并且正确执行),即getFoo()
是“Foo”属性的 getter),并且至于 Serializable
:这只不过是一个“标记接口”(一个不声明任何函数的接口),它告诉 Java 实现类同意(并暗示它能够)“序列化” – 将实例转换为字节流的过程。这些字节可以存储在文件中,通过网络连接发送等,并且有足够的信息允许 JVM(至少,知道对象类型的)稍后重建对象——可能在不同的实例中应用程序,甚至在另一台机器上!
当然,为了做到这一点,类必须遵守某些限制。其中最主要的是所有实例字段必须是原始类型(int、bool 等)、某些也可序列化的类的实例,或者标记为 transient
这样 Java 就不会尝试包含他们。 (这当然意味着 transient
字段将无法通过流传输。具有 transient
字段的类应该准备好在必要时重新初始化它们。)
一个不能遵守这些限制的类不应该实现 Serializable
(而且,IIRC,Java 编译器甚至不会 让它 这样做。)
原文由 cHao 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
JavaBean 只是一个 标准。它是一个普通的 Java
class
,除了它遵循某些约定:Serializable
。而已。这只是一个约定。很多图书馆都依赖它。
关于
Serializable
,来自 API 文档:换句话说,可序列化对象可以写入流,因此可以写入文件、对象数据库等等。
此外,JavaBean 和另一个类之间在语法上没有区别——如果一个类遵循标准,那么它就是一个 JavaBean。
它有一个术语,因为该标准允许库以编程方式处理您以预定义方式定义的类实例。例如,如果一个库想要流式传输您传递给它的任何对象,它知道它可以,因为您的对象是可序列化的(假设该库要求您的对象是正确的 JavaBeans)。