有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对基元类型使用常量或枚举

我想知道如果我想询问基元类型名称,首选的方法是什么。 我需要创建枚举类还是使用已有的枚举类(我搜索该类时未成功)

在这种情况下,你有什么建议

这是我的密码:

     else if (typeName.equals("char")) {
                return new SwitchInputType<Character>(new Character('z'));
            } else if (typeName.equals("decimal")
                    || (typeName.equals("java.math.BigDecimal"))) { 
...

共 (2) 个答案

  1. # 1 楼答案

    我不喜欢有很多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();
            }
        }
    
  2. # 2 楼答案

    您可以将变量强制转换为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) { 
    
    }