Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当类在扩展枚举时被检测到时,如何调用其valueOf()方法?_Java_Hibernate_Class_Enums_Hibernate Criteria - Fatal编程技术网

Java 当类在扩展枚举时被检测到时,如何调用其valueOf()方法?

Java 当类在扩展枚举时被检测到时,如何调用其valueOf()方法?,java,hibernate,class,enums,hibernate-criteria,Java,Hibernate,Class,Enums,Hibernate Criteria,我在Java中有一个Enum: 公共枚举类型用户{ 雇员(“雇员”), 雇主(“雇主”); 私有最终字符串类型; TypeOfUser(最终字符串类型){ this.type=type; } 公共字符串getType(){ 返回类型; } } 我在Hibernate映射中使用它,所以如果我想添加过滤,我使用Criteria接口。我基于Map构建标准,此时我检测它是否继承自Enum(导致每个Enum隐式继承自Java Enum类)并调用valueOf()方法的TypeOfUser: Class

我在
Java
中有一个
Enum

公共枚举类型用户{
雇员(“雇员”),
雇主(“雇主”);
私有最终字符串类型;
TypeOfUser(最终字符串类型){
this.type=type;
}
公共字符串getType(){
返回类型;
}
}
我在
Hibernate
映射中使用它,所以如果我想添加过滤,我使用
Criteria
接口。我基于
Map
构建标准,此时我检测它是否继承自
Enum
(导致每个
Enum
隐式继承自Java Enum类)并调用
valueOf()
方法的
TypeOfUser

Class fieldClass=element.getValue().getValue();
if(Enum.class.isAssignableFrom(fieldClass)){
标准.添加(
Restrictions.eq(element.getKey(),
TypeOfUser.valueOf(element.getValue().getKey())
);
}
但它之所以有效,是因为我在我的项目中只有一个Enum,将来还会有更多的Enum,比如
Months
等等。当类被检测为
Enum
时,是否有方法强制转换它,然后调用它的
valueOf()
方法?比如:

Class fieldClass=element.getValue().getValue();
if(Enum.class.isAssignableFrom(fieldClass)){
标准.添加(
Restrictions.eq(element.getKey(),
((Enum.class)fieldClass).valueOf(element.getValue().getKey())
);
}
我想这样做是为了避免
if-else
switch
指令,比如:

if(fieldClass.equals(TypeOfUser.class)){
value=TypeOfUser.valueOf(键);
}
else if(fieldClass.equals(Months.class)){
值=月份。值(键);
}

因为当项目中存在许多
Enum
s时,它们的维护非常困难。是否有机会在
Java
中实现这一点?提前感谢您的帮助。

您正在寻找
Enum.valueOf

Class<E> enumClass = ...
String name = ...
E e = Enum.valueOf(enumClass, name);
Class enumClass=。。。
字符串名=。。。
E=枚举.valueOf(枚举类,名称);

您要查找的是
Enum.valueOf

Class<E> enumClass = ...
String name = ...
E e = Enum.valueOf(enumClass, name);
Class enumClass=。。。
字符串名=。。。
E=枚举.valueOf(枚举类,名称);

Enum.valueOf(fieldClass,key)
在我看来应该行。
Enum.valueOf(fieldClass,key)
在我看来应该行。

你到底想实现什么?为什么要使用这些反射代码?@JBNizet因为我想编写
QueryRestriction
类,在那里我可以放置分页、筛选、排序等,然后调用方法,如
build()
,它会返回一个条件。我认为它应该尽可能的通用,因为它应该更适合那些可以是
长的
字符串
枚举
等等的字段,甚至是真正的类,比如
会议
,它有
位置
。也许我错了:)但我认为它需要通用代码。P.S.
Enum.valueOf(fieldClass,key)
正在做这项工作。你到底想实现什么?为什么要使用这些反射代码?@JBNizet因为我想编写
QueryRestriction
类,在那里我可以放置分页、筛选、排序等,然后调用方法,如
build()
,它会返回一个条件。我认为它应该尽可能的通用,因为它应该更适合那些可以是
长的
字符串
枚举
等等的字段,甚至是真正的类,比如
会议
,它有
位置
。也许我错了:)但我认为它需要通用代码。P.S.
Enum.valueOf(fieldClass,key)
正在执行此任务。