如何在内部实施枚举以及如何访问Java中枚举的构造函数



我想知道如何在Java内部实现Enum,并且我正在尝试以下示例

public enum MyEnum {
   MyEnum (){
    System.out.println("HelloWorld");   
    }
 }

正如上面的那样,我想知道如何调用Myenum()构造函数。

枚举类型的构造函数必须是包装私有化的或私人访问。它会自动创建在枚举主体开头定义的常数。您不能自己调用枚举构造者。

您无法从该枚举外部访问构造函数。您可以通过实际定义枚举常数来访问它。

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;
    private final double radius;
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
}

有关枚举的更多示例,请参见:https://docs.oracle.com/javase/tutorial/java/javaoo/enum.html

java像将java.lang.Enum作为其基类的类一样实现enum。它的大部分功能都来自Java编译器的支持,除其他外,该功能确保您不能用操作员new实例化enum类,并且enum值是属性构建的。

如果您想查看MyEnum的构造函数,请至少添加一个enum值:

public enum MyEnum {
    VALUE1;
    MyEnum (){
        System.out.println("HelloWorld");   
    }
}

注意:虽然您还可以使用反射来创建enum的"非法"实例,但不应在任何类似生产的设置中进行此操作,因为它会破坏有关enum成员的假设。

enum s是特殊类,是单胎的概括,为每个常数提供一个实例。在内部,这些字段被视为public static final,其类型与定义的enum相同。并且,枚举的构造函数被视为private,因此您无法从enum MyEnum外部调用MyEnum()构造函数。在我们希望将某些属性附加到常数的情况下,使用该构造函数。例如,请考虑以下:

public enum MyEnum {
    VAL_A("First Value"),
    VAL_B("Second Value");
    private final String fullName;
    MyEnum(String fullName){
        this.fullName = fullName;
    }
    public String getFullName() {
        return fullName;
    }
}

那么,我们可以做类似MyEnum.VAL_A.getFullName();

之类的事情

枚举是通过使用类概念在内部实现的。每个枚举常数被隐式地称为公共静态决赛。枚举常数是静态的,因此我们可以使用枚举名称访问它。

例如:

enum Color{
    Red,Green,Blue; 
}

内部实现为:

final class Color extends java.lang.Enum { 
    public static final Color Red = new Color ();
    public static final Color Green= new Color ();
    public static final Color Blue= new Color ();
}

所有枚举常数将在类自动加载时创建,因此,在每个枚举常数的枚举类加载时将执行构造函数。我们无法明确创建枚举对象,因此我们无法直接调用构造函数。

最新更新