代码之家  ›  专栏  ›  技术社区  ›  NSaran

Kotlin:通过Kotlin中的数据类在Java类中设置私有布尔值。为什么我不能这样做?

  •  10
  • NSaran  · 技术社区  · 7 年前

    我有一个Java类的格式:

    class JavaClass {
        private String name;
        private Boolean x;
    
        public String getName() { return name; }
        public void setName(String name) { this.name = name }
    
        public Boolean isX() { return x; }
        public void setX(Boolean x) { this.x = x }
    }
    

    我在Kotlin中将这个类重写为一个数据类,其格式如下:

    data class KotlinClass(
        var nameNew: String? = null,
        var xNew: Boolean = false
    ): JavaClass() {
    
        init {
            name = nameNew
            x = xNew
        }
    }
    

    为什么用x而不用名字?

    我在Kotlin类中创建了一个名为x的新变量,该变量带有一个自定义getter和setter,它抱怨setter意外重写(这是可以理解的)。这意味着Java setter和getter在数据类中可见。那么,为什么setter在init块中不用于x,就像它用于name一样?

    1 回复  |  直到 7 年前
        1
  •  7
  •   hotkey    7 年前

    这是因为 how Kotlin represents Java getters and setters as properties 。如果getter签名为 T isSomething() (而不是 T getSomething() isSomething something )对你来说 x = xNew 解析为私有字段访问。

    isX

    init {
        name = nameNew
        isX = xNew
    }
    

    或者,如果重命名 isX() getX() x=x新