3

我在我的 Java 界面中使用 Immutables ( http://immutables.org ) 来生成构建器和不可变对象。我创建了一个名为 @Primary 的自定义方法级别注释(表示哪个属性是主字段),我用它来注释我在 Immutable 接口中的一个方法。我在由不可变对象创建的生成的 java 类中看不到注释。我尝试查看 BYOA(自带注释),但这无济于事。

有没有办法将 @Primary 注释放到生成的不可变 java 类上?

更新(基于肖恩的以下建议)

我现在有一个基于以下配置

包信息.java

package com.mypackage;


import com.mercuria.recon.custom.annotation.Primary;
import org.immutables.value.Value;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.PACKAGE, ElementType.TYPE})
@Retention(RetentionPolicy.CLASS) // Make it class retention for incremental   compilation
@Value.Style(passAnnotations=Primary.class)
public @interface MyStyle {}

主要注释

package com.mypackage.custom.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Primary {

}

我在 package-info.json 中看到一个错误,其中说 MyStyle 应该在其自己的文件中声明。我不确定上面的配置是否正确。请你能告诉我哪里出错了吗?

4

1 回答 1

2

您可以配置要与注解一起传递的@Style注解,您可以在包级别使用这些注解。

例如,在任何包中创建一个名为 package-info.java 的文件并用

@Style(passAnnotations=Primary.class)

请参阅:样式自定义(解释了在何处存储@Style注释,但未提及passAnnotations机制)

这是一个示例 package-info.java 文件:

@Style(passAnnotations = YourAnnotation.class)
package com.yourapp;

import com.yourapp.annotations.YourAnnotation;
import org.immutables.value.Value.Style;

请注意,注释在package声明上方,而imports 在下方。

于 2017-03-06T17:15:03.543 回答