[英]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.