Java 对基元类型使用常量或枚举
我想知道如果我想询问基本类型名称,首选的方法是什么。 我需要创建枚举类还是使用已有的枚举类(我搜索该类时未成功) 在这种情况下,你有什么建议 这是我的密码:Java 对基元类型使用常量或枚举,java,enums,constants,primitive-types,Java,Enums,Constants,Primitive Types,我想知道如果我想询问基本类型名称,首选的方法是什么。 我需要创建枚举类还是使用已有的枚举类(我搜索该类时未成功) 在这种情况下,你有什么建议 这是我的密码: else if (typeName.equals("char")) { return new SwitchInputType<Character>(new Character('z')); } else if (typeName.equals("decimal")
else if (typeName.equals("char")) {
return new SwitchInputType<Character>(new Character('z'));
} else if (typeName.equals("decimal")
|| (typeName.equals("java.math.BigDecimal"))) {
...
else if(typeName.equals(“char”)){
返回新的SwitchInputType(新字符('z'));
}else if(typeName.equals(“十进制”)
||(typeName.equals(“java.math.BigDecimal”){
...
您可以将变量强制转换为对象
,然后获得该对象的类
,如下所示:
else if (((Object) typeName).getClass() == Character.class) {
return new SwitchInputType<Character>(new Character('z'));
}
else if (typeName != null && ((Object) typeName).getClass() == BigDecimal.class) {
}
else如果(((对象)typeName).getClass()==Character.class){
返回新的SwitchInputType(新字符('z'));
}
如果(typeName!=null&((对象)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;
}
}
}
decimal
和java.math.BigDecimal
不是基本类型。hi Iswanto San,我尝试使用您的代码,但例如,如果我键入“char”,则说明您的写入不起作用(返回新的SwitchInputType(新字符('z');)您的“不起作用”是什么意思?错误?您可以发布完整的代码吗?
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();
}
}