2017-07-06 17 views
3

私はKotlinで自分の注釈を作成する際にいくつか問題があります。いくつかの注釈を作成しなければならず、その中には配列型の値を宣言する必要があるものがあります。Kotlinアノテーションの配列値を宣言するにはどうすればいいですか?

public @interface JoinTable { 
... 
    JoinColumn[] inverseJoinColumns() default {}; 
... 
} 

JoinColumnも注釈型であるここで、我々はこれを行うことができますJavaで 。

私はKotlinにそのような何かをしたい:

annotation class JoinTable(
    val name: String, 
    val joinColumns: Array<JoinColumn> 
) 

私もこれを行うことを試みた:

annotation class JoinTable(
    val name: String, 
    val joinColumns: List<JoinColumn> 
) 

をしかし、私のIDEは言う:注釈の

無効なタイプをメンバー

どうすればいいですか?

ありがとうございました!

+1

非常に良い説明を! – guenhter

答えて

1

Javaの場合と同様に、アノテーションの値はコンパイル時に使用可能でなければなりません。 JoinColumnが通常のクラスまたはデータクラスの場合、val joinColumns: List<JoinColumn>は使用できません。 enumクラス(enum class JoinColumn)の場合は、それを使用することができます。

も参照してください許可されたタイプの公式kotlinドキュメントhttps://kotlinlang.org/docs/reference/annotations.html

可パラメータの種類は次のとおりです。Javaのプリミティブ型(INT、ロングなど)に対応し

  • タイプ。
  • 文字列;
  • クラス(Foo :: class);
  • enums;
  • 他の注釈;
  • 上記のタイプの配列。 JVMは、アノテーション属性の値としてnullを格納しサポートし していないため

注釈パラメータは、NULL可能なタイプを持つことができません。

+0

ありがとうございました!私は注釈を再確認し、間違いを見つけました。私は注釈としてマークJoinColumnを忘れてしまった –

3

これは私の大きな欠点でした。私は、私の実現におけるJoinColumnが注釈ではないことに気付かなかった。

class JoinColumn() 

まあ、それは^ _ ^固定:ところで、あなたの最初のポストのための

annotation class JoinColumn() 
関連する問題