簡體   English   中英

java enum getter轉換為int時出錯

[英]Error with java enum getter converting to int

因此,我在這里閱讀了一些有關stackoverflow的文章,並覺得其中的大部分內容都可以正常工作,但是他們通常沒有關於如何使用getter / setter的示例。

我非常想弄清楚這個問題,只是很難弄清楚這最后一部分

目前,我正在使用的程序中的所有商店都在使用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

shopName(name)不會執行您認為的操作。 這段代碼試圖調用方法shopName並將name作為參數傳遞,但是您沒有這種方法。

如果要基於提供的名稱獲取shopName枚舉,請使用shopName.valueOf(name) 因此您的代碼應該看起來像:

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

另請注意,如果您不提供適當的名稱,則此方法將引發IllegalArgumentException

枚舉也被視為type ,因此它的名稱應像其他Java(非原始)類型一樣以大寫字母開頭。 因此,將shopName更改為ShopName

您說openShop("GENERAL_STORE")更具可維護性,但是openShop(ShopName.GENERAL_STORE) (或更短的openShop(GENERAL_STORE) )將更具可維護性,因為編譯器將捕獲拼寫錯誤。

這是枚舉的主要目的之一。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM