【问题标题】:using constants or enum for primitive types对原始类型使用常量或枚举
【发布时间】:2013-02-17 09:46:55
【问题描述】:

如果我想询问原始类型名称,我想知道首选的方法是什么。 我需要创建一个枚举类还是使用已经存在的类(我搜索这个没有成功)

在这种情况下您有什么建议?

这是我的代码:

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

【问题讨论】:

  • decimaljava.math.BigDecimal 不是原始类型。

标签: java enums constants primitive-types


【解决方案1】:

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

}

【讨论】:

  • 嗨 Iswanto San,我想使用您的代码,但例如,如果我输入“char”,则说明您的写入不起作用(返回 new SwitchInputType(new Character('z' ));)
  • “不工作”是什么意思?错误 ?你能发布你的完整代码吗?
【解决方案2】:

我不喜欢有很多 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();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多