Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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嵌套枚举类型_Java - Fatal编程技术网

关于Java嵌套枚举类型

关于Java嵌套枚举类型,java,Java,我将给出这种情况下的示例java代码: //状态实体接口定义: 公共接口StateEntity扩展标识{//标识定义getId和setId 静态int-processBitState(int-state、布尔运算、int-pos){ 如果(op){ 状态=位。设置(状态,位置); }否则{ 状态=位。清除(状态,位置); } 返回状态; } 静态int-gatherState(类enumType,int-state,@NotNull T-data){ 试一试{ 方法getJsonFieldNam

我将给出这种情况下的示例java代码:

//状态实体接口定义:
公共接口StateEntity扩展标识{//标识定义getId和setId
静态int-processBitState(int-state、布尔运算、int-pos){
如果(op){
状态=位。设置(状态,位置);
}否则{
状态=位。清除(状态,位置);
}
返回状态;
}
静态int-gatherState(类enumType,int-state,@NotNull T-data){
试一试{
方法getJsonFieldName=enumType.getMethod(“getJsonFieldName”);
方法getPosition=enumType.getMethod(“getPosition”);
BeanInfo BeanInfo=Introspector.getBeanInfo(data.getClass());
PropertyDescriptor[]propertyDescriptors=beanInfo.getPropertyDescriptors();
for(E位集:EnumSet.allOf(enumType)){
字符串字段名=(字符串)getJsonFieldName.invoke(位集);
对于(PropertyDescriptor PropertyDescriptor:propertyDescriptors){
if(propertyDescriptor.getName().equals(fieldName)){
方法reader=propertyDescriptor.getReadMethod();
布尔值=(布尔)读取器.invoke(数据);
state=processBitState(状态,值,(整数)getPosition.invoke(位集));
打破
}
}
}
}catch(NoSuchMethodException | IllegalAccessException | InvocationTargetException | IntrospectionException e){
e、 printStackTrace();
}
返回状态;
}
类getStateType();
整数getState();
无效设置状态(整数状态);
}
//Impl类:
公共类StateEntityClass实现StateEntity{
长id;
整数状态;
@凌驾
公共长getId(){
返回id;
}
@凌驾
公共无效集合id(长id){
this.id=id;
}
@凌驾
公共类getStateType(){
返回(类)(位集类);
}
@凌驾
公共整数getState(){
返回状态;
}
@凌驾
公共无效设置状态(整数状态){
this.state=状态;
}
公共枚举位集{
激活(0),
冻结(1),
更新(2);
私人职位;
位集(int v){
位置=v;
}
@NotNull
公共字符串getName(){
返回name();
}
@NotNull
公共字符串getJsonFieldName(){
返回NameConverter.snakeCaseToCamelCase(“is_”+name().toLowerCase());
}
public int getPosition(){
返回位置;
}
}
}
//使用:
公共班机{
公共静态void main(字符串[]args){
StateEntityClass e=新的StateEntityClass();
//第一种方法,此语句错误:
e、 setState(StateEntity.gatherState(e.getStateType(),e.getState()==null?0:e.getState(),e));
//第二种方法,但此语句可以:
e、 setState(StateEntity.gatherState(StateEntityClass.BitSet.class,e.getState()==null?0:e.getState(),e));
//为什么?如何改变第一种方法
}
}
我有一些类实现
StateEntity
,因此我必须对泛型使用第一个方法

  • 如何更改代码以使用第一种方法
  • Java处理这些问题的方法是什么

枚举内容是不相关的,
StateEntity
implements类具有状态的自枚举。

我希望解决的问题是如何在Java中统一处理枚举。此枚举具有统一的结构和统一的接口,但包含的枚举数不同。具体情况见上述问题。在@tgdavies的提示下,我将类型参数从方法定义移动到接口定义,解决了这个问题。后来,在@Guillaume F的提醒下,我进一步优化了Enum的使用。感谢大家的参与

尝试给StateEntity一个类型参数:接口StateEntity@tgdavies是的,它有效!!谢谢。但是为什么呢?为什么不为
getJsonFieldName
getPosition
方法使用一个接口呢?“使用反射在这里很难闻。”@GuillaumeF。对使用界面很好。但是,enum如何实现接口?@GuillaumeF。我将枚举更改为implements接口。谢谢。这里有两个问题:第一,是否有其他方法遍历Enum的枚举器。第二,Java泛型可以用于类型,但不能用于方法