annotations - 从属性中注释 getter

标签 annotations kotlin

在 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 的可见性。所以不可能摆脱getterkotlin-allopen插入。因此,您可以做的一种可能的解决方案是编写自己的 kapt 插件以引发编译时错误,例如:
@SetOnly var text:String = "foo";

关于annotations - 从属性中注释 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44743907/

相关文章:

java - 作为 javassist 注释成员的注释数组

android - Firebase 函数抛出错误 com.google.firebase.functions.FirebaseFunctionsException : Response is not valid JSON object

java - 如何在打印屏幕中裁剪图像?

java - JSF 如何找到用@ManagedBean 注释的bean?

java - 未找到@Optional注释

java - 实现 java.lang.reflect.Proxy 的注释背后的基本原理是什么?

java - 如何在不记住密码的情况下以编程方式连接到 Wifi?

kotlin - 使用反射调用具有默认参数值的函数

java - 评估具有依赖项的 kotlin 脚本文件

java - 设计MapReduce体系结构中的自定义注释