在 kotlin 中,我们可以定义
var text: String
它将有一个 getter 和一个 setter。通过将其更改为
val
可以轻松删除 setter ,但是如果我们有一个应该只有 setter 而没有 getter 的属性呢?有什么方法可以创建一个注释,我们可以应用到 text
这将弃用 setter/getter ,因此其他人无法使用它?最终目标是能够使用属性语法而不是调用
setText
我知道当前的解决方法可以达到类似的结果:
var text: String
@Deprecated(level = DeprecationLevel.ERROR, message = "Non readable property")
get() = nonReadable()
set() ...
我想知道是否可以定义类似于
@SetterOnly
var text: String
set() ...
最佳答案
我可以告诉你,现在kotlin没有办法完成这个功能。由于错误 KT-3110未标记为 Fixed
.
我在下面的 kotlin 中测试了以下 java 代码,它只能通过 setText
访问 setter :
public class Property {
public void setText(String text) {/**/}
private String getText() { return "foo"; }
}
这意味着您无法移除 setter/getter /降低 setter/getter 的可见性。所以不可能摆脱
getter
像 kotlin-allopen
插入。因此,您可以做的一种可能的解决方案是编写自己的 kapt 插件以引发编译时错误,例如:@SetOnly var text:String = "foo";
关于annotations - 从属性中注释 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44743907/