com.google.auto.value.AutoOneOf Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of auto-value Show documentation
Show all versions of auto-value Show documentation
Immutable value-type code generation for Java 1.6+.
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.auto.value;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Specifies that the annotated class is a one-of class, also known as a tagged union. An
* {@code @AutoOneOf} class is very similar to an {@link AutoValue @AutoValue} class, in that its
* abstract methods define a set of properties. But unlike {@code @AutoValue}, only one of those
* properties is defined in any given instance.
*
* {@code @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();
* }}
*
* {@code @AutoOneOf} is explained in more detail in the user guide.
*
* @author Chris Nokleberg
* @author Éamonn McManus
*/
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface AutoOneOf {
/** Specifies an enum that has one entry per variant in the one-of. */
Class extends Enum>> value();
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy