所以我在这里阅读了一些关于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
答案 0 :(得分:5)
shopName(name)
没有按照您的想法行事。此代码尝试调用方法shopName
并将name
作为参数传递,但您没有这样的方法。
如果您希望根据提供的名称获取shopName
枚举使用shopName.valueOf(name)
。所以你的代码可能应该是这样的:
int shopId = shopName.valueOf(name).getId();
另请注意,如果您不提供正确的名称,此方法将抛出IllegalArgumentException
。
此外,枚举被视为 type ,因此其名称应该像其他Java(非原始)类型一样以大写字母开头。因此,将shopName
更改为ShopName
。
答案 1 :(得分:1)
您说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 */
}