我有一个私密的枚举,不会暴露在课外。反正我是否可以对该类型进行静态导入,这样我每次都不必输入枚举类型?或者有更好的方法来写这个吗?例如:
package kip.test;
import static kip.test.Test.MyEnum.*; //compile error
public class Test
{
private static enum MyEnum { DOG, CAT }
public static void main (String [] args)
{
MyEnum dog = MyEnum.DOG; //this works but I don't want to type "MyEnum"
MyEnum cat = CAT; //compile error, but this is what I want to do
}
}
答案 0 :(得分:6)
您可以使用no-modifier访问级别,即
enum MyEnum { DOG, CAT }
任何子类中的其他包中的类都不会显示 MyEnum
。它是最接近私有的形式,但却让您避免明确引用MyEnum
。
答案 1 :(得分:3)
或者有更好的方式来写这个吗?
如果您的主要目标是引用没有符合条件的枚举标识符的项目,并私下维护此列表,则可以完全废弃enum
类型并使用普通的私有静态常量。
答案 2 :(得分:2)
考虑到您可以访问完全限定的字段,我会说编译器(或语言规范)中的一个错误是您无法静态导入它。
我建议您使枚举包受保护。
答案 3 :(得分:2)
将某些代码移动到枚举的(静态)方法中可能(或可能不)合理。
如果按下,则可以复制外部类中的静态字段。
private static final MyEnum CAT = MyEnum.CAT;
private static final MyEnum DOG = MyEnum.DOG;
Icky,但有可能。
答案 4 :(得分:0)
不,这几乎是private
的全部内容。
答案 5 :(得分:0)
您可以简单地在枚举中编写代码。
public enum MyEnum {
DOG, CAT;
public static void main(String[] args) {
MyEnum dog = MyEnum.DOG; // this works but I don't want to have to type
// MyEnum
MyEnum cat = CAT; // compile error, but this is what I want to do
}
}
私有枚举可以在没有类的情况下引用的另一个地方是在switch语句中:
private static enum MyEnum {
DOG, CAT
}
public static void main(String[] args) {
MyEnum e = null;
switch (e) {
case DOG:
case CAT:
}
}