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