2017-03-06 5 views
2

JavaインタフェースでImmutables(http://immutables.org)を使用してビルダーと不変オブジェクトを生成しています。 @Primary(どの属性がプライマリフィールドであるかを示す)というカスタムメソッドレベルの注釈を作成しました。このメソッドは、不変のインターフェイスで自分のメソッドの1つに注釈を付けるために使用しています。私はimmutablesによって生成された生成されたJavaクラスの注釈を見ません。私はBYOA(自分の注釈を持ってくる)を見てみましたが、それは助けになりません。イミュラブルを使用しているときにインタフェースから生成されたJavaクラスへの転送アノテーションを持ちます。

生成された不変のJavaクラスに@Primaryアノテーションを取得する方法はありますか?

UPDATE私は今

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を自分のファイルで宣言する必要があるというエラーが表示されます。上記の設定が正しいかどうかわかりません。私はどこに間違っているのかアドバイスできますか?

+0

package-info.json?このファイルは、package-info.javaと呼ばれることになっています。そして、そこにカスタムアノテーションを定義するのではなく、パッケージに注釈を付けるべきです(私の答えを参照してください) –

答えて

1

@Styleアノテーションで渡すアノテーションをパッケージレベルで設定することができます。

など。任意のパッケージに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 Sを超えていることに留意されたいです。

+0

こんにちは、スタイルを教えてくれてありがとう。私はそれを完全に理解しているかどうかはわかりません。私は設定した方法で私の最初の投稿を更新しました。私が間違っているかもしれない場所を教えてください。 – megan

+0

Stylesアノテーションはコード生成を設定します。クラスに直接注釈を付けることもできますし、複数のクラスに同じ設定を適用する場合は、パッケージに注釈を付けることもできます。 –

+0

私はpackage-info.javaファイルを正しく設定していないと思います。このファイルの内容は何でしょうか。私が上に貼り付けたサンプルで何が間違っているか教えていただけますか? – megan

関連する問題