【问题标题】:Kotlin generating priavate field: @MyAnnotation field must not be private or staticKotlin 生成私有字段:@MyAnnotation 字段不能是私有或静态的
【发布时间】:2018-07-23 06:08:22
【问题描述】:

我正在学习 Kotlin。

我开发了一个基于注释处理的 Java 库。该库在 Java 上完美运行。我的库包含用户可以放在类字段上的注释。但该字段不应为 privatestatic 以便处理该字段。

@MyAnnotation
private String userName;

这将引发编译时错误,建议用户删除private 修饰符以由我的库的注释处理器处理。

一旦用户删除private,它就可以工作了。

现在以 Kotlin 为例

@MyAnnotation
var spUserName : String? = null

这正在生成如下所示的私有字段。

...
private java.lang.String spUserName;
...

所以我的注释处理器抛出了编译时错误。

在网上搜索后,在该字段上添加@JvmField 可以正常工作,如下所示。

@JvmField
@MyAnnotation
var spUserName : String? = null

但我不希望我的用户在我的注释上方再添加一个注释。如果有这么多字段,它会增加代码。

请建议任何其他替代方案以避免@JvmField

所以我的问题是:如何在不使用 @JvmField 的情况下使我的字段在 Kotlin 中成为非私有字段?

【问题讨论】:

    标签: java android kotlin annotations


    【解决方案1】:
    @MyAnnotation
    public var str: String? = null
    

    添加public修饰符

    我不知道为什么我删除了这个答案。如果您访问过this link,您会看到类内成员的默认修饰符是private

    【讨论】:

    • public 是默认修饰符。
    猜你喜欢
    • 2020-11-12
    • 2014-06-19
    • 2012-09-29
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多