如何在Java中只允许某些值作为方法的参数?

我想写一个只接受参数某些值的方法,比如在Android的类中。您只能使用 或 作为方法 的持续时间。我看了一下该类的源代码,但在那里什么也没找到。我怎样才能做到这一点?ToastToast.LENGTH_SHORTToast.LENGTH_LONGmakeText(Context context, int resId, int duration)Toast


答案 1

您可以为方法使用@IntDef@StringDef批注,如下所示:

@Retention(SOURCE)
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
public @interface NavigationMode {}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
...
public abstract void setNavigationMode(@NavigationMode int mode);
@NavigationMode
public abstract int getNavigationMode();

答案 2

使用 Java 教程中的枚举类型

枚举类型是一种特殊的数据类型,它使变量能够成为一组预定义的常量。该变量必须等于为其预定义的值之一。常见示例包括罗盘方向(北、南、东和西的值)和星期几。

例如,

public enum MyEnum {
  ONE, TWO;
}

public static void myMethod(MyEnum a) {
  // a must be MyEnum.ONE or MyEnum.TWO (in this example)
}

编辑

要从枚举类型中获取 String(s),您可以添加字段级别值(必须是编译时间常量),如下所示:

public enum MyEnum {
  ONE("uno"), TWO("dos");
  MyEnum(String v) {
    value = v;
  }
  private String value;
  public String getValue() {
    return value;
  }
}