Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin注释不在FieldDecellation或编译java中_Java_Hibernate_Kotlin_Annotations - Fatal编程技术网

Kotlin注释不在FieldDecellation或编译java中

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)不会出现问题 注释定义

对于Kotlin中的数据对象,我为GSON添加了一个自定义注释,以具有排除规则

在过去,它工作得很好,现在它不会出现在我的类反射中(
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不可见)
  • 字段
  • get
    (属性getter)
  • 设置
    (属性设置器)
  • 接收器
    (扩展函数或属性的接收器参数)
  • param
    (构造函数参数)
  • setparam
    (属性设置器参数)
  • 委托
    (存储委托属性的委托实例的字段)
[……]

如果未指定使用站点目标,则将根据所用批注的
@target
批注选择目标。如果存在多个适用目标,则使用以下列表中的第一个适用目标:

  • param
  • 属性
  • 字段
需要从中吸取的三个重要方面是:

  • Kotlin中的注释在最终应用于何处方面存在一定程度的模糊性。例如,将注释放置在您所做的位置意味着所述注释可以应用于至少五个不同位置中的一个:属性、字段、getter、setter、setter参数
  • 应用于Kotlin属性的注释在Java端不可见
  • 如果Kotlin属性上的批注不适用于Kotlin属性,且没有使用站点目标,则该批注将仅应用于支持字段
  • 您的批注在其
    @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