繁体   English   中英

java enum getter转换为int时出错

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM