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

kao*_*ick 10 java parameters methods android android-toast

我想编写一个方法,只对参数采用某些值,比如ToastAndroid 中的类中的fe .您只能使用Toast.LENGTH_SHORTToast.LENGTH_LONG作为方法的持续时间makeText(Context context, int resId, int duration).我查看了Toast该类的源代码,但没有发现任何内容.我怎样才能做到这一点?

Mar*_*Bak 26

您可以为您的方法使用@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();
Run Code Online (Sandbox Code Playgroud)

  • 确切的答案应该被接受而不是另一个 (3认同)

Ell*_*sch 6

使用Java教程中的枚举类型,

枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量.变量必须等于为其预定义的值之一.常见示例包括罗盘方向(NORTH,SOUTH,EAST和WEST的值)和星期几.

举个例子,

public enum MyEnum {
  ONE, TWO;
}

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

编辑

要从枚举类型中获取String,您可以添加字段级值(必须是编译时常量),例如,

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

  • @kaolick如果你真的开始使用`String`参数,而不是定义另一个类(例如`enum`)来表示可能的值,那么这对你不起作用.您可以选择让方法检查有效输入,如果不是,则抛出异常. (2认同)