JAVA中不同类型枚举的getCode
getCode of Enum of different types in JAVA
如何在枚举中存储不同的类型并在不需要转换的情况下访问它们?
public enum PlugsEnum {
LOCAL_DATE(LocalDate.of(9999,12,31)),
CONTRACTORNAME("autoname");
@Getter
private final Object code;
PlugsEnum(Object code) {
this.code = code;
}
}
LocalDate localDate = (LocalDate) PlugsEnum.LOCAL_DATE.getCode()
枚举是一组有限的相同类型的命名对象
您误解了 Java 中枚举的用途。正如 Java Language Specification 中所述,枚举“定义了一小组命名的 class 实例”。所以枚举中命名的所有对象必须属于同一类型。该类型是声明它们的 Enum
subclass。
例如:
enum Rgb { RED , GREEN , BLUE }
enum CountryInUk { ENGLAND , NORTHERN_IRELAND , SCOTLAND , WALES }
enum Flavor { VANILLA , CHOCOLATE , STRAWBERRY }
Enum
子class 中的每个命名对象都是同一类型。因此,您添加的任何成员 属性 都将出现在每个命名对象中。
在下一个示例中,我们将 String
类型的成员 属性 hex
添加到上面看到的每个 Rgb
枚举对象。
enum Rgb {
RED( "FF0000" ) , GREEN( "00FF00" ) , BLUE( "0000FF" ) ;
private String hex ; // Hexadecimal representation.
private Rgb( String hex ) { this.hex = hex ; } ;
public String getHex() { return this.hex ; }
}
关联对象的方式
如果您想通过名称将各种对象关联在一起,请使用 Java 的其他功能。
您可以定义一个 Map
来跟踪 key-value 对的集合。参见 Oracle tutorial。
Map< String, LocalDate > contracts = new HashMap<>() ;
contracts.put( someContractorName , someHireDate ) ;
contracts.put( otherContractorName , otherHireDate ) ;
或者定义一个 class 来将各个部分放在一起。如果 class 的主要目的是透明且不可变地传输数据,请将 class 定义为 record.
record Contract ( String contractorName , LocalDate whenHired ) {}
Contract pavement = new Contract ( "Acme Pavement Company" , LocalDate.of( 2023, Month.JANUARY , 23 ) ) ;
如何在枚举中存储不同的类型并在不需要转换的情况下访问它们?
public enum PlugsEnum {
LOCAL_DATE(LocalDate.of(9999,12,31)),
CONTRACTORNAME("autoname");
@Getter
private final Object code;
PlugsEnum(Object code) {
this.code = code;
}
}
LocalDate localDate = (LocalDate) PlugsEnum.LOCAL_DATE.getCode()
枚举是一组有限的相同类型的命名对象
您误解了 Java 中枚举的用途。正如 Java Language Specification 中所述,枚举“定义了一小组命名的 class 实例”。所以枚举中命名的所有对象必须属于同一类型。该类型是声明它们的 Enum
subclass。
例如:
enum Rgb { RED , GREEN , BLUE }
enum CountryInUk { ENGLAND , NORTHERN_IRELAND , SCOTLAND , WALES }
enum Flavor { VANILLA , CHOCOLATE , STRAWBERRY }
Enum
子class 中的每个命名对象都是同一类型。因此,您添加的任何成员 属性 都将出现在每个命名对象中。
在下一个示例中,我们将 String
类型的成员 属性 hex
添加到上面看到的每个 Rgb
枚举对象。
enum Rgb {
RED( "FF0000" ) , GREEN( "00FF00" ) , BLUE( "0000FF" ) ;
private String hex ; // Hexadecimal representation.
private Rgb( String hex ) { this.hex = hex ; } ;
public String getHex() { return this.hex ; }
}
关联对象的方式
如果您想通过名称将各种对象关联在一起,请使用 Java 的其他功能。
您可以定义一个 Map
来跟踪 key-value 对的集合。参见 Oracle tutorial。
Map< String, LocalDate > contracts = new HashMap<>() ;
contracts.put( someContractorName , someHireDate ) ;
contracts.put( otherContractorName , otherHireDate ) ;
或者定义一个 class 来将各个部分放在一起。如果 class 的主要目的是透明且不可变地传输数据,请将 class 定义为 record.
record Contract ( String contractorName , LocalDate whenHired ) {}
Contract pavement = new Contract ( "Acme Pavement Company" , LocalDate.of( 2023, Month.JANUARY , 23 ) ) ;