Kotlin注释不在FieldDecellation或编译java中
对于Kotlin中的数据对象,我为GSON添加了一个自定义注释,以具有排除规则 在过去,它工作得很好,现在它不会出现在我的类反射中(Kotlin注释不在FieldDecellation或编译java中,java,hibernate,kotlin,annotations,Java,Hibernate,Kotlin,Annotations,对于Kotlin中的数据对象,我为GSON添加了一个自定义注释,以具有排除规则 在过去,它工作得很好,现在它不会出现在我的类反射中(this.javaClass.declaredFields[3]。注释为null),也不会出现在编译的java输出中 我尝试过不同的事情,比如升级我的kotlin版本,添加kotlin kapt,使用不同的@Retention类型,重新启动我的计算机(你永远不知道),以及查看其他注释。这些其他注释(例如Hibernate a@OneToOne)不会出现问题 注释定义
this.javaClass.declaredFields[3]。注释
为null
),也不会出现在编译的java输出中
我尝试过不同的事情,比如升级我的kotlin版本,添加kotlin kapt,使用不同的@Retention
类型,重新启动我的计算机(你永远不知道),以及查看其他注释。这些其他注释(例如Hibernate a@OneToOne
)不会出现问题
注释定义:
数据类中的用法:
我希望注释显示在javaClass反射和编译的java代码中。两者都没有
编译的密码变量(无注释…):
private-final-var密码:kotlin.String/*编译代码*/`
您应该使用适当的使用站点目标来限定注释:
@field:ExcludeFromJSON
private var password: String
这将导致注释出现在由该属性生成的Java字段上
根据Kotlin参考资料,关于: 在注释属性或主构造函数参数时,有多个Java元素是从相应的Kotlin元素生成的,因此注释在生成的Java字节码中有多个可能的位置。[……] [……] 支持的使用站点目标的完整列表为:
李>文件
(具有此目标的注释对Java不可见)李>属性
李>字段
(属性getter)李>get
(属性设置器)李>设置
(扩展函数或属性的接收器参数)李>接收器
(构造函数参数)李>param
(属性设置器参数)李>setparam
(存储委托属性的委托实例的字段)委托
@target
批注选择目标。如果存在多个适用目标,则使用以下列表中的第一个适用目标:
李>param
李>属性
字段
@Target
批注中同时具有AnnotationTarget.FIELD
和AnnotationTarget.PROPERTY
。由于未指定使用站点目标,因此该属性优先,这意味着注释对Java不可见
有关属性和字段的更多信息,请参阅Kotlin参考页
一,。它在技术上并不含糊不清,因为所有内容都有很好的定义。使用
@field:ExcludeFromJSON
怎么样?@Slaw它可以工作!你救了我的命,也请把它作为答案贴出来!然后我可以给它打个好的对勾。还请解释为什么这是一件事(3天前还不错)供将来参考(以及我的兴趣)。在过去几天内,您的环境有什么更新吗?没有,我不能特别指出。相同的机器,相同的代码,相同的梯度文件。我也回到了我的git历史,那也没有做任何事情。所以,不,不是我能说的。那么我不知道为什么你的代码过去可以工作。尽管如此,我还是添加了一个答案来解决这个问题。
@Entity
@Table(name = "user")
class User (
var username: String = "",
var email: String = "",
@ExcludeFromJSON
private var password: String
) {}
@field:ExcludeFromJSON
private var password: String