2017-04-27 82 views
0

我一直在試圖給枚舉變量賦值,但我無法成功。 所以我想要的是有兩個值optionOneoptionTwo。 這樣A.valueOf("THIS");將帶來值爲2 A.getOptionOne()和4在枚舉變量上設置兩個不同的值

A.getOptionTwo()在Eclipse中我得到一個錯誤線

"The nested type A cannot hide an enclosing type" on 
<< public enum A {THIS("2","4"), IS("4","7"), REAL("12.5","29")}; >> 

我想一些建議:(

//編輯:我會努力在錯誤信息中它確實沒有關係,我想獲得在單個枚舉變量上設置兩個不同值的方法指南。

public class A { 

    public enum A {THIS("2","4"), IS("4","7"), REAL("12.5","29")}; 

    private final String optionOne; 
    private final String optionTwo; 

    private A(String optionOne, String optionTwo){ 
     this.optionOne= optionOne; 
     this.optionTwo= optionTwo; 
    } 

    public String getOptionOne(){ 
     return optionOne; 
    } 

    public String getOptionTwo(){ 
     return optionTwo; 
    } 
} 
+0

'Vehicle'?什麼是「車輛」? –

+2

您的錯誤信息與您發佈的代碼無關,請發佈[mcve]。 – Berger

+0

@ScaryWombat對不起,我想概括一下我問的問題,而不是僅僅發佈我的代碼。因爲我想要如何爲一個枚舉變量設置兩個值的方向,而不是調試。 –

回答

3

錯誤消息告訴你到底發生了什麼錯誤:你的枚舉定義隱藏了它所在的同名類的名字。

Java的枚舉是一類特殊類型,其中enum常量是唯一允許的實例。因此,您不必將您的枚舉放在另一個類中。只需提供枚舉定義中的方法:

public enum A { 
    THIS("2","4"), IS("4","7"), REAL("12.5","29"); 

    private final String optionOne; 
    private final String optionTwo; 

    A(String optionOne, String optionTwo){ 
     this.optionOne= optionOne; 
     this.optionTwo= optionTwo; 
    } 

    public String getOptionOne(){ 
     return optionOne; 
    } 

    public String getOptionTwo(){ 
     return optionTwo; 
    } 
} 

public void test() { 
    System.out.println(A.valueOf("THIS").getOptionOne()+ " - "+A.valueOf("THIS").getOptionTwo()); 
} 
+1

哦,我明白了,那確實解決了我的錯誤代碼,如果這也是設置值的問題,我將不得不開始工作。 –

+1

「Java的枚舉本身就像類」 - 這是因爲枚舉_are_類。 –

+0

@LewBloch好點。編輯。 –

1

我想你對嵌套類型在Java中的工作方式存在誤解。在你的例子中,你有一個名爲'A'的類,其嵌套枚舉也被稱爲'A'。即使Java允許這個名字發生衝突(它不會),它會令人困惑。在特定的情況下我們會談論哪個'A'?

無論如何,你不需要在這種情況下任何嵌套,你只需要像這樣定義的正枚舉:

public enum A 
{ 
    FOO("1","2"), BAR("2","3"); 

    private final String optionOne; 
    private final String optionTwo; 

    A(String one, String two) 
    { 
     this.optionOne = one; 
     this.optionTwo = two; 
    } 

    public String getOptionOne(){ 
     return optionOne; 
    } 

    public String getOptionTwo(){ 
     return optionTwo; 
    } 
} 

然後,您可以說:

A.FOO.getOptionOne(); //1 
A.FOO.getOptionTwo(); //2 

A.BAR.getOptionOne(); //3 
A.BAR.getOptionTwo(); //4 

你可能會發現它對read up on enum definitions有用。

+0

OP的代碼沒有「內部類也稱爲A」。嵌套枚舉從來都不是內部類。 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9 –

+0

「我甚至不知道這個名稱衝突是否會被允許」 - 錯誤這個問題的信息是關於證明它不是,如果注意的話。 –

+0

是的,你說得對 – Michael