[英]using constants or enum for primitive types
我想知道如果我想要原始類型name的首選使用方式。 我需要創建一個枚舉類還是使用已經存在的枚舉類(我一直在搜索此類而沒有成功)
在這種情況下,您有何建議?
這是我的代碼:
else if (typeName.equals("char")) {
return new SwitchInputType<Character>(new Character('z'));
} else if (typeName.equals("decimal")
|| (typeName.equals("java.math.BigDecimal"))) {
...
您可以將變量轉換為Object
,然后像這樣獲取該對象的Class
:
else if (((Object) typeName).getClass() == Character.class) {
return new SwitchInputType<Character>(new Character('z'));
}
else if (typeName != null && ((Object) typeName).getClass() == BigDecimal.class) {
}
我不喜歡很多if-else的代碼。 因此,這是我對相同問題的解決方案。
類型的枚舉:
public enum Types {
BYTE,
BOOLEAN,
SHORT,
CHAR,
INT,
FLOAT,
LONG,
DOUBLE,
OBJECT;
private static final String ALL_TYPES_STRING = Arrays.toString(Types.values());
public static Types getType(Class<?> clazz) {
String className = clazz.getSimpleName().toUpperCase();
if (ALL_TYPES_STRING.contains(className)) {
return Types.valueOf(className);
} else {
return Types.OBJECT;
}
}
}
ReflectionHelper的方法:
public static void setFieldValue(Object object,
String fieldName,
String value) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Types types = Types.getType(field.getType());
switch (types) {
case BYTE:
field.set(object, Byte.valueOf(value));
break;
case BOOLEAN:
field.set(object, Boolean.valueOf(value));
break;
case SHORT:
field.set(object, Short.valueOf(value));
break;
case CHAR:
field.set(object, value.charAt(0));
break;
case INT:
field.set(object, Integer.decode(value));
break;
case FLOAT:
field.set(object, Float.valueOf(value));
break;
case LONG:
field.set(object, Long.valueOf(value));
break;
case DOUBLE:
field.set(object, Double.valueOf(value));
break;
case OBJECT:
default:
field.set(object, value);
}
field.setAccessible(false);
} catch (SecurityException | NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.