2013-02-17 23 views
0

我不知道如果我要問基本類型名稱的首選方法使用。 我是否需要創建一個枚舉類或使用已有的類(我沒有成功搜索過)使用常量或枚舉基本類型

在這種情況下,您的建議是什麼?

這裏是我的代碼:

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

'decimal'和'java.math.BigDecimal'不是原始類型。 – 2013-02-17 09:51:18

回答

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) { 

} 
+0

喜Iswanto三,即時通訊特林使用你的代碼,但例如,如果我有型「字符」,你寫不工作的狀態(返回新SwitchInputType (新字(「Z」));) – 2013-02-17 12:45:05

+0

你是什麼意思與「不工作」?錯誤?您可以將您完整的代碼? – 2013-02-18 00:12:48

0

我不喜歡有許多如 - 代碼其他。所以,這裏是我同一個問題的解決方案。

枚舉爲類型:ReflectionHelper的

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

方法:

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