[英]Java: use enum to call set methods in class
我的班級目前看起來像這樣:
@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()]);
...
}
}
如何簡化構造函數? 有沒有一種方法可以將set函數映射到每個枚舉值並在for循環中調用它們? 如果是這樣,怎么辦?
謝謝,Swagatika
使用Reflection
可以簡化構造。 假設您要根據枚舉EnumFields
調用setVn
方法,則可以通過Reflection
從類中檢索該方法,然后調用該方法。
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.