Java:使用enum调用类中的set方法
我的类当前看起来像这样:Java:使用enum调用类中的set方法,java,enums,constructor,Java,Enums,Constructor,我的类当前看起来像这样: @Getter @Setter public class Class1 { private String v1; private String v2; private String v3; ... //Enum to be used to index each variable public enum EnumFields { ENUM_V1, ENUM_V2, ENUM_V3
@Getter
@Setter
public class Class1 {
private String v1;
private String v2;
private String v3;
...
//Enum to be used to index each variable
public enum EnumFields
{
ENUM_V1,
ENUM_V2,
ENUM_V3,
...
...
}
public Class1(String[] arrayStr) {
setV1(arrayStr[EnumFields.ENUM_V1.ordinal()]);
setV2(arrayStr[EnumFields.ENUM_V2.ordinal()]);
setV3(arrayStr[EnumFields.ENUM_V3.ordinal()]);
...
}
}
如何简化构造函数?是否有一种方法可以将集合函数映射到每个枚举值,并在for循环中调用它们?如果是,怎么做
谢谢,
Swagatika使用
反射
可以简化构造。假设您想要根据enumEnumFields
调用setVn
方法,可以通过类中的反射
检索该方法,并可以调用该方法
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Class1 {
// Enum to be used to index each variable
public enum EnumFields {
ENUM_V1, ENUM_V2, ENUM_V3,
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
String[] arrayStr = new String[EnumFields.values().length];
for (int i = 0; i < arrayStr.length; i++) {
arrayStr[i] = String.valueOf(i);
}
Class1 class1 = new Class1(arrayStr);
System.out.println(class1.v1);
System.out.println(class1.v2);
System.out.println(class1.v3);
}
private String v1;
private String v2;
private String v3;
public Class1(String[] arrayStr) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
for (EnumFields enumField : EnumFields.values()) {
Method setMethod = Class1.class.getDeclaredMethod("setV" + (enumField.ordinal() + 1), String.class);
setMethod.invoke(this, arrayStr[enumField.ordinal()]);
}
}
private void setV1(String v) {
this.v1 = v;
}
private void setV2(String v) {
this.v2 = v;
}
private void setV3(String v) {
this.v3 = v;
}
}
import java.lang.reflect.InvocationTargetException;
导入java.lang.reflect.Method;
公共班级1{
//用于索引每个变量的枚举
公共枚举字段{
枚举V1、枚举V2、枚举V3、,
}
publicstaticvoidmain(字符串[]args)抛出NoSuchMethodException、SecurityException、IllegalAccessException、,
IllegalArgumentException,InvocationTargetException{
String[]arrayStr=新字符串[EnumFields.values().length];
对于(int i=0;i
是否有可能使字符串v1
,…,vN
成为长度为N
的字符串数组?@Alerra这有什么帮助?我不知道是否有可能在没有某种组织结构(如数组)的情况下遍历字符串。我对此的最好猜测(可能不是最好的方法)是创建一个枚举和字符串数组,并对它们进行迭代。为什么Class1
有v1
、v2
和v3
,而不是String[]vs
?我目前没有看到这样做的用例。当然,一个人可以使用反射,但是你不应该使用它,除非你必须这样做。