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

Kotlin:带有公共setter的受保护变量

  •  1
  • jack_the_beast  · 技术社区  · 7 年前

    我是KOTLIN的新手,我正在尝试创建Java的情况:

    protected String aVariable;
    
    public setAVariable(String aValue){
        aVariable = aValue;
    }
    

    如果我试图用不同的修饰符指定setter,我会得到一个错误。我也尝试过:

    protected var aVariable: String? = null
    
    fun setAVariable(value: String?){
        aVariable = value
    }
    

    但它告诉我,同一个方法已经存在,具有不同的修饰符(它是默认的修饰符)。

    我可以只更改setter方法名,但我想避免这样做。我有什么办法可以做到吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Roland    7 年前

    你可能想看看 getters and setters 在Kotlin参考中。

    在这里,您可以看到如何覆盖或更改setter/getter的可见性,例如:

    // public var with private setter:
    var demo : String = ""
        private set
    

    现在,对于您希望拥有公共setter但受保护getter的特定情况,您可能会认为以下方法可以工作:

    private var demo : String = ""
        public set
    

    但这不管用。科特林抱怨道 Setter visibility must be the same or less permissive than property visibility .所以:使用Kotlin标准意味着这是不可能的。当然,您可以使用任何其他公开访问的方法,并从中设置适当的属性,例如:

    private var demo : String = ""
    fun overwriteDemo(s : String) {
      demo = s
    }