繁体   English   中英

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

[英]Can I do a static import of a private subclass?

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

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
  }
}

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

enum MyEnum { DOG, CAT }

对于来自其他包的类, MyEnum都不会从任何子类中看到。 它是最接近私有的形式,但让你避免明确引用MyEnum

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

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

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

我建议你使枚举包受保护。

将一些代码移动到枚举的(静态)方法中可能(或可能不)是合理的。

如果按下,则可以复制外部类中的静态字段。

private static final MyEnum CAT = MyEnum.CAT;
private static final MyEnum DOG = MyEnum.DOG;

Icky,但有可能。

不,这几乎就是private所有。

你可以简单地在enum本身内编写你的代码。

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:
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM