簡體   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