Annotation Type AutoOneOf


  • @Retention(CLASS)
    @Target(TYPE)
    public @interface AutoOneOf
    Specifies that the annotated class is a one-of class, also known as a tagged union. An @AutoOneOf class is very similar to an @AutoValue class, in that its abstract methods define a set of properties. But unlike @AutoValue, only one of those properties is defined in any given instance.
    @AutoOneOf(StringOrInteger.Kind.class)
     public abstract class StringOrInteger {
       public enum Kind {STRING, INTEGER}
    
       public abstract Kind getKind();
    
       public abstract String string();
       public abstract int integer();
    
       public static StringOrInteger ofString(String s) {
         return AutoOneOf_StringOrInteger.string(s);
       }
    
       public static StringOrInteger ofInteger(int i) {
         return AutoOneOf_StringOrInteger.integer(i);
       }
     }
    
     String client(StringOrInteger stringOrInteger) {
       switch (stringOrInteger.getKind()) {
         case STRING:
           return "the string '" + stringOrInteger.string() + "'";
         case INTEGER:
           return "the integer " + stringOrInteger.integer();
       }
       throw new AssertionError();
     }

    @AutoOneOf is explained in more detail in the user guide.

    • Required Element Summary

      Required Elements 
      Modifier and Type Required Element Description
      java.lang.Class<? extends java.lang.Enum<?>> value
      Specifies an enum that has one entry per variant in the one-of.
    • Element Detail

      • value

        java.lang.Class<? extends java.lang.Enum<?>> value
        Specifies an enum that has one entry per variant in the one-of.