2016-05-24 78 views
1

因此,我在這裏閱讀了一些關於stackoverflow的文章,感覺我的大部分工作都是正常的,但他們通常沒有關於如何使用getters/setters的示例Java enum getter轉換爲int的錯誤

我非常接近解決這個問題,只是很難找出這最後一部分

目前我正在使用的程序中的所有商店都使用openShop(id);但我想能夠使用openShop(「GENERAL_STORE」);因爲這樣可以更容易維護,而且不需要查看ID就可以輕鬆查看。

任何想法我做錯了什麼?

private enum shopName { 
    GENERAL_STORE(577); 

    private final int id; 
    shopName(int id) { 
     this.id = id; 
    } 
    public int getId() { 
     return this.id; 
    } 
}; 

public void openShop(String name) { 
    int shopId = shopName(name).getId(); //line with error 
    //int shopId = shopName.shopName(name).getId(); //I've also tried this 
    openShop(shopId); 
} 
public void openShop(int id) { 
    /* blah */ 
} 

這裏是我得到

$ ./compiler.sh 
file.java:#: error: cannot find symbol 
    int shopId = shopName(name).getId(); 
       ^
    symbol: method shopName(String) 
    location: class File 
1 error 

回答

5

shopName(name)不會做你認爲它的錯誤。此代碼嘗試調用方法shopName並通過name作爲參數,但您沒有此類方法。

如果你想獲得shopName枚舉基於提供的名稱使用shopName.valueOf(name)。所以,你的代碼也許應該是這樣的:

int shopId = shopName.valueOf(name).getId(); 

另外要注意,此方法將拋出IllegalArgumentException,如果你不提供正確的名稱。

enums也被認爲是類型,所以它的名字應該像其他Java(非原始類型)一樣以大寫字母開頭。因此請將shopName更改爲ShopName

+0

花了一個小時試圖弄清楚,謝謝。 –

+0

@JeanHobbit歡迎您:) – Pshemo

+1

@JeanHobbit調試的第一步就是將複合語句分解爲單獨的語句。它會告訴你,問題不在你認爲的地方。 – chrylis

1

你說openShop("GENERAL_STORE")更易於維護,但openShop(ShopName.GENERAL_STORE)(或更短的openShop(GENERAL_STORE))會更易於維護,因爲編譯器會捕獲拼寫錯誤。

這是enums的主要目的之一。

public enum ShopName { 
    GENERAL_STORE(577); 

    private final int id; 
    private ShopName(int id) { 
     this.id = id; 
    } 
    int getId() { 
     return this.id; 
    } 
}; 

public void openShop(ShopName name) { 
    openShop(name.getId()); 
} 
public void openShop(int id) { 
    /* blah */ 
}