Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Enums_Constants_Primitive Types - Fatal编程技术网

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();
        }
    }