Java/Kotlin中是否存在对应Swift闭包初始化属性的实现方式?
对应实现方案
Kotlin 实现(和Swift语法高度一致)
Kotlin原生支持完全等价的写法,有两种常用写法:
- 写法1:和Swift语法几乎完全相同,直接调用匿名lambda
class SomeClass { val someProperty: SomeType = { // 自定义初始化逻辑 someValue }() }
- 写法2:用Kotlin标准库的
run作用域函数,可读性更高
class SomeClass { val someProperty: SomeType = run { // 自定义初始化逻辑,最后一行为返回值 someValue } }
注意:如果需要首次访问属性时才执行初始化逻辑(懒加载),可以用val someProperty by lazy { /* 初始化逻辑 */ },和上述初始化时立即计算的逻辑有区别
Java 实现
Java没有原生的lambda立即调用初始化属性的语法,常用两种等价实现方案:
- 方案1:用实例初始化块赋值,无额外性能开销
class SomeClass { private final SomeType someProperty; // 实例初始化块,在构造函数执行前运行 { // 自定义初始化逻辑 someProperty = someValue; } }
- 方案2:用私有静态方法封装初始化逻辑,适合复用初始化代码
class SomeClass { private final SomeType someProperty = initSomeProperty(); private static SomeType initSomeProperty() { // 自定义初始化逻辑 return someValue; } }
注意:不推荐用双括号初始化实现该需求,会生成匿名内部类、持有外部类引用,容易引发内存泄漏问题
内容的提问来源于stack exchange,提问作者Linus Karlsson
相关产品推荐
相关产品推荐

