使用Immutables

时间:2017-03-06 17:07:35

标签: java immutables-library

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

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

更新(根据肖恩的建议)

我现在有一个基于

的配置

package-info.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应该在自己的文件中声明。我不确定上面的配置是否正确。请问你能告诉我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您可以使用@Style注释配置要传递的注释,您可以在包级别使用该注释。

E.g。在任何包中创建一个名为package-info.java的文件,并使用

进行注释
@Style(passAnnotations=Primary.class)

请参阅:Style customization(解释存储@Style注释的位置,但未提及passAnnotations机制)

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

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

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

请注意,注释高于package声明和import以下。