gpt4 book ai didi

java - 在哪里最好定义java枚举?

转载 作者:行者123 更新时间:2023-12-01 12:09:11 28 4
gpt4 key购买 nike

对于在 java 中定义枚举的位置是否有“最佳实践”?

一种选择是为每个枚举创建一个单独的 .java 文件,并且任何使用该枚举的类都可以包含它。

示例:

方向.java:

public enum Direction {
INPUT, OUTPUT, UNKNOWN
}

类型.java

public enum Type{
DATA, VALID, READY, UNKNOWN
}

另一种选择是在我的应用程序中使用一个包含所有枚举的大文件,如果一个类使用任何枚举,则它必须包含该大文件。

示例:

MyEnums.java

public class MyEnums{
public enum Direction {
INPUT, OUTPUT, UNKNOWN
}

public enum Type{
DATA, VALID, READY, UNKNOWN
}
}

就性能和代码可移植性/可扩展性而言,这两个选项中哪一个更好?或者这是一个选择问题,没有更好的选择?在 Java 中定义枚举的最佳方式是什么?

最佳答案

基本上,如果您不打算公开枚举的用法,例如Direction 那么你可以在使用它的类中正确执行它。我的意思是你可以将其设为私有(private),例如:

1 作为内部类型(直接使用)

public class Foo {

private Direction directionType = Direction.UNKNOWN;

// some code

private enum Direction {
INPUT, OUTPUT, UNKNOWN
}
}

2 作为外部类型

在单独的 *.java 文件中编写带有逻辑的枚举(如果有的话)。这绝对是个好方法。下面的例子是 Oracle Guide 中的经典例子:

public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);

private final double mass; // in kilograms
private final double radius; // in meters

Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}

private double mass() { return mass; }
private double radius() { return radius; }

// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;

double surfaceGravity() {
return G * mass / (radius * radius);
}

double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}


public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Planet <earth_weight>");
System.exit(-1);
}

double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/EARTH.surfaceGravity();
for (Planet p : Planet.values())
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}

}

摘要

这实际上取决于上下文和架构决策。基本上,将枚举分组在一个 java 文件中并不是最好的解决方案,尤其是当您的应用程序开始“增长”时。对于其他将要处理该代码的开发人员来说,该代码将很难阅读。我建议使用方法#1#2

关于java - 在哪里最好定义java枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27369145/

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