注释 – 从属性注释getter

在kotlin,我们可以定义

var text: String

这将有一个吸气剂和一个二传手.通过将setter更改为val来删除setter很容易,但是如果我们有一个只应该有setter且没有getter的属性呢?有没有办法创建一个我们可以应用于文本的注释,这个注释会弃用getter,以便其他人不能使用它?

最终目标是能够使用属性语法而不是调用setText

当前的解决方法我知道它实现了类似的结果:

var text: String
    @Deprecated(level = DeprecationLevel.ERROR, message = "Non readable property")
    get() = nonReadable()
    set() ...

我想知道是否可以定义类似的东西

@SetterOnly
var text: String
    set() ...

最佳答案 我可以告诉你,现在无法在kotlin中完成此功能.因为bug
KT-3110没有标记为Fixed.

我在下面的kotlin中测试了以下java代码,它只能通过setText访问setter:

public class Property {
   public void setText(String text) {/**/}
   private String getText() { return "foo"; }
}

这意味着您无法移除吸气剂/降低吸气剂的可见度.因此不可能像kotlin-allopen插件那样摆脱吸气剂.所以你可以做的一个可能的解决方案是编写自己的kapt插件来抛出编译时错误,例如:

@SetOnly var text:String = "foo";
点赞