为什么这个枚举在自己的文件中声明.这有优势吗?我怎么能把它放在2个文件中的一个.我真的不知道我在做什么.请以简单的方式解释这一点,因为这是一个教科书示例,我对Java很新.
ScaleName.java
enum ScaleName {celsius, fahrenheit, kelvin, rankine};
Run Code Online (Sandbox Code Playgroud)
Temperature.java
class Temperature {
private double number;
private ScaleName scale;
public Temperature() {
number = 0.0;
scale = ScaleName.fahrenheit;
}
public Temperature(double number) {
this.number = number;
scale = ScaleName.fahrenheit;
}
public Temperature(ScaleName scale) {
number = 0.0;
this.scale = scale;
}
public Temperature(double number, ScaleName scale) {
this.number = number;
this.scale = scale;
}
public void setNumber(double number) {
this.number = number;
}
public double getNumber() {
return number;
}
public void setScale(ScaleName scale) {
this.scale = scale;
}
public ScaleName getScale() {
return scale;
}
}
Run Code Online (Sandbox Code Playgroud)
UseTemperature.java
class Temperature {
private double number;
private ScaleName scale;
public Temperature() {
number = 0.0;
scale = ScaleName.fahrenheit;
}
public Temperature(double number) {
this.number = number;
scale = ScaleName.fahrenheit;
}
public Temperature(ScaleName scale) {
number = 0.0;
this.scale = scale;
}
public Temperature(double number, ScaleName scale) {
this.number = number;
this.scale = scale;
}
public void setNumber(double number) {
this.number = number;
}
public double getNumber() {
return number;
}
public void setScale(ScaleName scale) {
this.scale = scale;
}
public ScaleName getScale() {
return scale;
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 26
为什么在Java中用单独的文件声明枚举?
你不必须申报enum在一个单独的文件.你可以这样做:
public class Temperature {
public enum ScaleName {celsius, fahrenheit, kelvin, rankine};
private double number;
private ScaleName scale;
public Temperature() {
number = 0.0;
scale = ScaleName.fahrenheit;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这个和使枚举成为顶级类的唯一区别是,当您在另一个类中使用它时,您现在需要限定枚举的名称.
但是,如果枚举是常规类,那么这里发生的事情也没有什么不同.(并且枚举是隐式静态的,所以我们不需要static关键字......)
为什么这个枚举在自己的文件中声明.
因为代码作者选择这样做.
这有优势吗?
是.这意味着没有资格enum使用它...在某些情况下,如果enum嵌套如上所述.
实际上,Java允许您将多个顶级类放入同一个源文件中,前提是除了其中一个类之外的所有类都是"包私有".然而,这样做通常被认为是不好的风格,对某些工具链来说可能会有问题......我听说过.
fge*_*fge 14
枚举不仅仅是Java中的裸值,它们远不止于此.它们本身就是类(它们继承Object).并考虑这些:
public enum Int {
ONE(1),
TWO(2);
private final int value;
Int(final int value) { this.value = value; }
public int getValue() { return value; }
@Override
public String toString() { return "I am integer " + value; }
}
Run Code Online (Sandbox Code Playgroud)
还要考虑:
public enum Operation
{
PLUS
{
@Override
public int calculate(final int i1, final int i2)
{
return i1 + i2;
}
};
public abstract int calculate(int i1, int i2);
}
final int ret = Operation.PLUS.calculate(2, 3);
Run Code Online (Sandbox Code Playgroud)
你也可以将它们结合起来.它们是非常强大的工具.
Anenum是 aclass并遵循相同的规定。
将其放在自己的文件中就像将内部类移动到单独的文件中一样,仅此而已。所以是的,您可以将它移到类之一中,并能够使用OuterClass.ScaleName语法从外部访问它。