gpt4 book ai didi

java - 使用枚举作为实现的容器

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:32 37 4
gpt4 key购买 nike

我目前正在开展一个项目,我们必须在 3D 环境中表示一组 vector 。我们有几种不同的可视化实现。

我想到了可以将所有可视化类型捆绑在一个枚举中的想法。我已经定义了一个接口(interface) VectorVisualization 和几个实现这个接口(interface)的实现。

现在我已将以下枚举添加到接口(interface)类中:

public interface VectorVisualization {

public enum VectorVisualizationType {
CYLINDER(new VectorVisualizationCylinder(), "Cylinder"),
CONES(new VectorVisualizationCones(), "Cones"),
FATCONES(new VectorVisualizationFatCones(), "Fat cones"),
ARROWS(new VectorVisualizationArrows(), "Arrows");

private final String label;
private final VectorVisualization vis;

VectorVisualizationType(VectorVisualization vis, String label) {
this.vis = vis;
this.label = label;
}

public VectorVisualization getVisualization() {
return this.vis;
}

public String getLabel() {
return this.label;
}
}

void prepareVBO(GL gl, ArrayList<VectorData> vectors, VectorField field);
void render(GL gl);
void clearOldVBOS(GL gl);
}

该标签用于 Gui 中的 JComboBox。所以我现在可以遍历枚举并获得不同类型的标签。还要设置一个实现,我可以像这样使用枚举:

VectorVisualizationType.CYLINDER.getVisualization()

但这是一种好方法吗?或者这种方法有什么问题吗?当然,现在当您创建了一个新的实现时,您必须将其添加到枚举中。

感谢您的意见!

最佳答案

很有趣。我以前使用枚举类型来携带有用的元数据位,但从来没有用它来存储可执行代码片段。

也就是说,我看到您的方法的唯一问题是,正如您已经指出的那样,当您创建新的 VectorVisualization 实现时,您将必须手动向枚举添加一个新条目。一般来说,我更愿意尽可能避免这种手动开销,但这实际上是个人喜好的问题。

如果您(以及与您一起编写此代码的其他人)知道此限制并且不介意,那么我认为您的解决方案很好。

请注意,您当前的结构要求每个 VectorVisualization 都以线程安全的方式实现,因为只有一个实例会分发给通过枚举类型引用它的每个人。如果这是一个问题,您可以通过针对枚举而不是实现实例存储实现类来解决它,然后简单地修改 getVisualization() 以创建关联实现类的新实例。叫。这将对 VectorVisualization 实现施加额外的限制,每个实现都需要提供一个公共(public)的 0 参数构造函数,该构造函数创建一个可用的实现实例。

关于java - 使用枚举作为实现的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966830/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com