因此,我在这里阅读了一些有关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

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

10-08 02:36