我不是Java程序员,但我需要编写一些Java代码,我一直在阅读Java枚举,Java enum类是在Java 5中引入的一种特殊类型的类,用于替换int常量。我的问题是,由于有两种类型,一种是原语,一种是int
,另一种是类,所以可以在类之外创建枚举吗?举个例子,可以给我以下几个吗?
enum ClassEnum {
Integer,
Double,
MyClass
}
我之所以想这样做,是因为我需要对3-4类进行switch
,这是一种基于我在switch
中得到的类的分派方法。我将要切换的所有N
类都有自己的结构,因此需要根据它们的类型进行不同的处理。不过,它们都是一个公共抽象类的一部分。
发布于 2022-03-24 09:23:01
如果您使用的是最新版本的Java,那么您就有了许多具有密封类和模式匹配功能的选项。
下面是在您的上下文中可能有效的另一个选项。但不建议采用这种方法。
public enum ClassType {
NONE(None.class), // Could not determine.
INTEGER(Integer.class),
CHAR(Character.class),
LONG(Long.class),
FLOAT(Float.class),
DOUBLE(Double.class),
EMPLOYEE(Employee.class),
ETC(Etc.class);
private Class aClass;
private ClassType(Class aClass) {
this.aClass = aClass;
}
public static ClassType getClassTypeByClass(Class aClass) {
return Arrays.stream(values()).filter(entry -> entry.aClass.equals(aClass)).findFirst().orElse(NONE);
}
}
class Employee {}
class Etc {}
class None {}
以下示例代码用于验证:
ublic class ClassTypeMain {
public static void main(String[] args) {
determineType(ClassType.getClassTypeByClass(Integer.class));
determineType(ClassType.getClassTypeByClass(Etc.class));
determineType(ClassType.getClassTypeByClass(String.class));
determineType(ClassType.getClassTypeByClass(Employee.class));
}
private static void determineType(ClassType classType) {
switch(classType) {
case ETC: System.out.println(" I am ETC");
break;
case INTEGER: System.out.println(" I am INT");
break;
case NONE: System.out.println(" Could not determine type");
break;
default: System.out.println(" Something else ");
}
}
https://stackoverflow.com/questions/71599355
复制相似问题