从酒店注释吸气剂

时间:2017-06-25 06:45:02

标签: annotations kotlin

在kotlin,我们可以定义

var text: String

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

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

当前的解决方法我知道这会产生类似的结果:

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

我想知道是否可以定义类似于

的内容
@SetterOnly
var text: String
    set() ...

2 个答案:

答案 0 :(得分:1)

我可以告诉你,现在无法在kotlin中完成此功能。由于错误KT-3110未标记为setText

我在下面的kotlin中测试了以下java代码,它只能通过public class Property { public void setText(String text) {/**/} private String getText() { return "foo"; } } 访问setter:

getter

这意味着您无法移除吸气剂/降低吸气剂的可见度。所以不可能摆脱kotlin-allopen之类的@SetOnly var text:String = "foo"; 插件。所以你可以做的一个可能的解决方案是编写自己的kapt插件来抛出编译时错误,例如:

fastlane_version "fastlane 2.39.2"

答案 1 :(得分:0)

如果您不希望将此属性在外部使用,为什么不将其声明为

private var text :String =""