@StringDef,@ IntDef等使生活变得简单,是使用枚举的好选择。 通常我们看到这些定义如下:
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
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;
....
如果要在注释本身内部定义这些内容,是否会出现任何问题。例如:
@IntDef({NavigationMode.NAVIGATION_MODE_STANDARD, NavigationMode.NAVIGATION_MODE_LIST, NavigationMode.NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationMode {
int NAVIGATION_MODE_STANDARD = 0;
int NAVIGATION_MODE_LIST = 1;
int NAVIGATION_MODE_TABS = 2;
}
....
当这些def注释被单独定义以便可以跨模块使用时,这很方便。
答案 0 :(得分:1)
我正在使用Set-AzureVMPuppetExtension : Cannot bind parameter 'VM'. Cannot convert the "$VM" value of type "System.String" to type
"Microsoft.WindowsAzure.Commands.ServiceManagement.Model.IPersistentVM".
出了名。它非常棒,特别是因为Android Studio 2.0可以正确使用此注释和@IntDef
语句。
我通常使用这种模式:
switch
然后我可以通过public static final class NavigationMode {
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface Value {
}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
// Suppress default constructor for noninstantiability
private NavigationMode() {
throw new AssertionError();
}
}
引用该值,注释为NavigationMode.NAVIGATION_MODE_STANDARD
,并且有一个更简单的@NavigationMode.Value
定义(没有@IntDef
前缀)。
但我必须说......我非常喜欢你的第二种方法!
NavigationMode.
我甚至可以切换到它。虽然我不是Android Studio为其着色的方式的忠实粉丝:
我认为以这种方式定义的值不会出现任何问题。