java enum getter转换为int时出错

1 java enums casting

所以我在这里阅读了一些关于stackoverflow的文章,感觉我的大部分都在工作,但是他们通常没有关于如何使用getter/setters的例子

我非常接近搞清楚这个问题,只是很难搞清楚这最后一部分

目前我正在使用的程序中的所有商店都使用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 */
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

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

Psh*_*emo 5

shopName(name)不会做你认为它做的事情.此代码尝试调用方法shopName并name作为参数传递,但您没有这样的方法.

如果你想shopName根据提供的名称使用enum shopName.valueOf(name).所以你的代码可能应该是这样的:

int shopId = shopName.valueOf(name).getId();
Run Code Online (Sandbox Code Playgroud)

另请注意,IllegalArgumentException如果您不提供正确的名称,此方法将抛出.

枚举也被认为是类型,因此它的名称应该像其他Java(非原始)类型一样以大写字母开头.所以shopName改为ShopName.