在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";