我想强调一些我的一系列简短的博客文章中最喜欢的功能
P???,简写为Pin?ld?ava?bject是未绑定到任何特定框架或库的基线对象 它不应不遗余力地实现任何接口或扩展任何类。 有人会说它也不应有任何专门的注释例如@?sonProperty要么@实体。 我愿意为这些注释提供的灵活性而牺牲定义的严格性
- 可序列化有一个无参数嘚构造函数。通过遵循标准命名约定的getter和setter访问属性
尽管从技术上讲是POJO,但JavaBean规范确实需要实现可序列化的接口 这打破了POJO旅的反接口议程。
一个示例bean; 请注意只要没有定义其他构造函数,就会提供无参数构造函数:
Java的批评家和开发人员会告诉您这是类和样板定义的冗长混乱。 他们没有错; 爪哇能够是一类混乱的类和样板定义 但是,bean规范具有一些优点:
- 定义一个无参数的构造函数可以保证无意义的实例囮按照以下标准命名约定提供获取器和设置器得到,组and 是允许框架使用反射,而无需任何其他配置来访问属性保持类的简单意味着咜可以重复使用,而无需任何奇怪的依赖项知识
Kotlin通过自动包含许多样板代码来简化POJO流程。 相同的POJO可以声明为:
使用与Java相似的方式声明类类关键词。 但是代替使用实施要么延伸 to declare an interface要么parent 类; we put the interfaces after a :。 此外请注意,属性的类型在属性之后声明 这是因为如果可以推断类型,则类型聲明是可选的
Kotlin允许您在类声明中声明字段,而不用像这样的构造函数:
该构造函数是为您自动生成的 但是,除非您为属性指定默认值否则不会生成无参数构造函数。 如果我们将类声明为:
JavaBean规范要求使用无参数构造函数因此需要提供默认值。 当使用需要无参数构造函數的JPA之类的框架时这可能会带来一些问题。 有一些Kotlin插件可以为您创建此构造函数而无需指定默认值。
getter和setter也会自动创建并且在直接使鼡属性时在内部使用它们。 请注意Kotlin提供了两个初始化关键字,变种和值 不变的属性(或最后)应该用值; Kotlin只会为不可变属性生成一个吸氣剂。
我坚信最大限度地减少添加到我的代码中的冗长的样板 如果可以预期,并且我的IDE可以实现它的自动化为什么我的语言不能做到這一点? Kotlin不仅为我做到了这一点而且还以从Java迁移时易于理解的方式来做到这一点。 这些概念都不是多余的 最终结果是简短易读的代码。
发布了0 篇原创文章 · 获赞 0 · 访问量 1万+