给定提供给其构造函数的参数,如何找到枚举值?

发布于 2024-07-25 17:46:17 字数 423 浏览 1 评论 0原文

我有一个像这样的枚举类:

public enum Position {
    A1(0,0),
    A2(1,0),
    //etc

    public final int dy, dx;

    private Position(int dy, int dx) {
        this.dy = dy;
        this.dx = dx;
    }
}

现在我想要一个方法:public static Position getPosition(int dx, int dy) 我可以使用给定的 dxdy 返回 Position.A1Position.A2 而无需使用大量if 结构?

I have an enum class like this:

public enum Position {
    A1(0,0),
    A2(1,0),
    //etc

    public final int dy, dx;

    private Position(int dy, int dx) {
        this.dy = dy;
        this.dx = dx;
    }
}

Now I want a method: public static Position getPosition(int dx, int dy)
Can I return Position.A1 or Position.A2 with the given dx and dy without using a whole lot of if-structures?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故乡的云 2024-08-01 17:46:17

也许最简单的方法(实际上相对较快)就是简单地循环枚举:

public static Position getPosition(int dx, int dy) {
    for (Position position : values()) {
        if (position.dx == dx && position.dy == dy) {
            return position;
        }
    }
    return null;
}

Perhaps the easiest way (and actually relatively fast) to do it is by simply looping through the enums:

public static Position getPosition(int dx, int dy) {
    for (Position position : values()) {
        if (position.dx == dx && position.dy == dy) {
            return position;
        }
    }
    return null;
}
送舟行 2024-08-01 17:46:17

您可以在创建枚举时将它们存储在Map(枚举类的本地)中。 使用由坐标组成的键和枚举本身的值填充地图。

然后您的 getPosition() 方法将使用坐标作为存储值(枚举)的键。 这可能比迭代枚举集更快(通常这取决于创建的位置数量)

生成密钥的简单方法类似于

String key = "" + dx + "/" + dy;

(注意:因为映射是静态的类,它是共享资源,您可能需要担心线程环境中的同步等问题)

You can store the enums in a Map (local to the enum class) as you create them. Populate the map with the key made up of the coordinates, and the value being the enum itself.

Then your getPosition() method will use the coordinates as a key to the stored value (enum). That may be faster than iterating through the set of enums (as usual it depends on the number of positions created)

A trivial way to generate the key would be something like

String key = "" + dx + "/" + dy;

(note: since the map is static to the class, it's a shared resource and you may want to worry about synchronisation etc. in a threaded environment)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文