私は列挙型を持っています:
_public enum AppEnums {
SERVICE_ERROR,
CONNECTION_ERROR;
}
_
そして、Android注釈のintDefで使用したい:
_@IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR})
public @interface ServiceErrors {
}
_
エラーが表示されます:
互換性のないタイプが見つかりました、必須: 'long'
この非互換性で何ができますか?
AppEnumパラメータの値を手動で処理したくないので、通常はEnumが自動的に値を作成します。 AppEnums.CONNECTION_ERROR.ordinal()
はenumパラメータのint値を返しますが、ここでは機能しません。
IntDef
アノテーションの主なアイデアは、int
のようなenum
定数のセットを使用することですが、withoutenum
。この場合、すべての定数を手動で宣言する必要があります。
@IntDef({Status.IDLE, Status.PROCESSING, Status.DONE, Status.CANCELLED})
@Retention(RetentionPolicy.SOURCE)
@interface Status {
int IDLE = 0;
int PROCESSING = 1;
int DONE = 2;
int CANCELLED = 3;
}
詳細な例を参照できます here 。
まあ、あなたはそのようにはできません。 AppEnums.SERVICE_ERROR
はint
を返しません。 AppEnums.SERVICE_ERROR
を返します。それが列挙型のポイントです。
私が提案できるのはこれです:
public static class AppEnums {
public static final int CONNECTION_ERROR = 0;
public static final int SERVICE_ERROR = 1;
}
@IntDef({AppEnums.CONNECTION_ERROR,AppEnums.SERVICE_ERROR})
public @interface ServiceErrors {
}
Yazazzelloのコメントからコピー:
IntDef-Android development。 Enumには静的定数の2倍以上のメモリが必要になることがよくあります。Androidでenumを使用することは厳密に避ける必要があります 。so
IntDef
Enumを置き換えるように設計されている場合、Enum
宣言ではIntDef
を使用できません
@Retention(RetentionPolicy.SOURCE)
@IntDef({NOT_STARTED, PENDING, COMPLETED})
public @interface DownloadState {
int NOT_STARTED = 1;
int PENDING = 2;
int COMPLETED = 3;
}