javaandroidenumsandroid-support-libraryandroid-annotations

Enums and android annotation intDef


I have an enum:

public enum AppEnums {
    SERVICE_ERROR,
    CONNECTION_ERROR;
}

and I want to use it in an intDef of Android Annotation:

@IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR})
public @interface ServiceErrors {
}

error shows:

incompatible types found, required: 'long'

What I can do with this incompatibility?

I don't want to handle values of AppEnum parameters manually, Enum create values automatically ordinarily. AppEnums.CONNECTION_ERROR.ordinal() return int value of enum parameter but don't work here.


Solution

  • The main idea of IntDef annotation is to use set of int constants like an enum, but without enum. In this case you have to declare all constants manually.

    @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;
    }
    

    You can see detailed example here.