我可以静态导入私有子类吗?

Kip*_*Kip 7 java syntax enums static-import

我有一个私人的枚举,不要暴露在课外.反正我是否可以对该类型进行静态导入,这样我每次都不必输入枚举类型?或者有更好的方法来写这个吗?例:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

Sug*_*Sug 6

您可以使用no-modifier访问级别,即

enum MyEnum { DOG, CAT }
Run Code Online (Sandbox Code Playgroud)

MyEnum不会从任何子类的其他包中看到类.它是最接近私有的形式,但却让您避免明确引用MyEnum.


Thi*_*ilo 5

考虑到您可以完全限定地访问该字段,我想说这是编译器(或语言规范)中的一个错误,您无法静态导入它。

我建议您对枚举包进行保护。


akf*_*akf 2

或者有更好的方法来写这个吗?

如果您的主要目标是引用没有限定枚举标识符的项目,并私下维护此列表,则可以enum完全废弃该类型并使用普通的私有静态常量。

  • 不,枚举除了封装之外还提供其他形式的安全性 - 例如,您可以在 switch 语句中使用它们,如果省略其中一个,您可能会收到警告。只需坚持使用限定符即可 - java 中存在更严重的冗长问题;) (6认同)