java - Kotlin:相当于 Swift 的属性包装器

标签 java swift kotlin

Kotlin 的等效属性包装器是什么:

@propertyWrapper
struct Foo {

    var wrappedValue: String {
        get {
            return "Test
        }
    }

}

@Foo var test:字符串

最佳答案

在 Kotlin 中,documentation 有多个选项了解如何向属性添加自定义行为。基本上有两个选项:自定义 setter/getter 和 Delegated Properties .

Kotlin 中可能有所不同的一些事情:

  • 属性为valvarval 就像Java中的final,只能赋值一次,var可以重新赋值。

  • 这两种类型都可以有自定义 getter。 var可以有自定义 setter 。

  • 如果您想要一个支持字段,Kotlin 会为您提供一个。只需在 setter 或 getter 中使用关键字 field 即可。

  • Kotlin 属性没有隐式默认值。您必须在构造函数中(或通过 init block )或在 = 之后的声明处进行初始化。

  • 某些属性实际上是计算出来的,但实际上并不存储任何内容。在这种情况下,没有后备字段,并且不需要(或允许)初始化程序。

示例:

class Dog {
    // Must have initial value, default getter and setter. Value can come from constructor.
    val isNice: Boolean = true 
        set(value) { ... } // This produces an error, no setters on vals

    // Must have initial value, default getter
    var age: Int = 0 
        set(value) { if (value >= 0) field = value }

    // Value is just computed, has no field and cannot have initial value
    var ageInDogYears: Int 
        get() = age * 7
        set(value) { age = value / 7 }
}

关于java - Kotlin:相当于 Swift 的属性包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59338119/

相关文章:

swift - Swift 中字符串操作的复杂性

swift - UIView Nib 中的 UICollectionView

kotlin - 第一次发出 kotlin 协程后,MutableStateFlow 不发出值

android - 在两个 fragment 之间传递数据类

java - 使用 Java 14 的 IntelliJ 2020.1 中的 "Records"预览功能在 Maven `install` 期间因编译器错误而失败,但以其他方式运行

java - Postgres-错误 : prepared statement "S_1" already exists

java - JPA(Hibernate)保存ManyToOne关系的问题

java - Grafana 仪表板将执行器池的 "boundedElastic"与 "parallel"分开

ios - 从 [NSString : AnyObject] as UIViewAnimationCurve? 获取对象

php - Android - Kotlin : Sending a non empty jsonObject but receiving an empty one