2012-05-19 30 views
1

如果我有一個Enum作爲Java類中的助手,有沒有什麼辦法可以在類的外部引用該枚舉?類中的枚舉助手(java)

基本上,我有是這樣的:

class Account extends MyClass { 
    HashMap<Property, String> property = new HashMap<Property, String>(); 
    public Account() { 
    } 

    public enum Property { 
     USERID, 
     PASSWORD; 
    } 
} 

我希望能夠訪問該帳戶類以外的財產枚舉。 我想這樣做的原因是因爲這是另一個的子類,我希望能夠訪問給定子類的屬性而無需引用唯一的枚舉名稱(即:無需將每個枚舉引用爲,AccountProperty或ResearchProperty或TaskProperty等)。

+0

*編輯 - 添加延伸。 MyClass的枚舉屬性,每個子類。 –

+1

如果每個子類中的屬性鍵/名稱不同,那麼在每個子類 –

+0

當中需要一個不同的枚舉聲明......這就是我所害怕的。 –

回答

3

你枚舉是公開的,所以你只可以使用Account.PropertyAccount

編輯外訪問:

如果我得到你需要什麼,你想這樣做

Property p = Account.Property.PASSWORD; 
Property p1 = Product.Property.CODE; 

,其中產品是

public class Product extends MyClass{ 
    HashMap<Account.Property, String> property = new HashMap<>(); 
    public Product() { 
    } 

    public static enum Property { 
     CODE, 
     PRICE; 
    } 
} 

並且您想在MyClass中執行此操作。

的問題是,無論是兩條線需要進口,你不能使用相同的名稱導入兩個類,所以唯一的解決辦法是做這樣的事情

Account.Property p = Account.Property.PASSWORD; 
Product.Property p1 = Product.Property.CODE; 

我想你」我們必須處理instanceof以便爲每個類使用正確的Property枚舉,因爲無法擴展枚舉!

+0

如果枚舉是成員而不是靜態類,可以靜態訪問它嗎? – Ixx

+0

我不明白你的問題!也許你可以添加一個你想要做的事情的示例代碼:) – StepTNT

+0

我沒有試圖做任何事情,我只是問你說的是否可能(現在不能測試)。屬性是一個內部非靜態類的帳戶,所以我想知道爲什麼它有可能以一種靜態的方式(Account.Property)而不是accountInstance.Property訪問它 – Ixx

0

只是聲明枚舉作爲公共頂級枚舉類(在它自己的文件)

+0

但我試圖使用不同的屬性枚舉使用相同的代碼。這隻適用於一個Property枚舉。 –

+0

但這些將是不同的枚舉類型。在java語言中,你不能繼承枚舉。你手頭的實際問題是什麼? –

1

可能像下面的(但這並沒有類型檢查):

import java.util.*; 
abstract class MyClass { 
    Map<Object,String> properties=new HashMap<Object,String>(); 
} 
class Account extends MyClass { 
    enum Property { 
     userid,password 
    } 
    //static Set<Property> keys=EnumSet.allOf(Property.class); 
} 
class Research extends MyClass { 
    enum Property { 
     red,green; 
    } 
    static Set<Property> keys=EnumSet.allOf(Property.class); 
} 
public class So10666881 { 
    public static void main(String[] args) { 
     Account account=new Account(); 
     account.properties.put(Account.Property.userid,"user"); 
     account.properties.put(Account.Property.password,"pass"); 
     for(Account.Property property:Account.Property.values()) 
      System.out.println(property+"="+account.properties.get(property)); 
    } 
}