2014-04-02 53 views
2

我正在開發一個通用工具,它應該有最小尺寸和代碼重複。 這段代碼是好還是壞的java練習?泛型使用和java標準

public static <T> T getProperty(String fileName,String propertyName, Class<T> type){ 
    T result=null; 
    try{ 
     Properties properties=propertyMap.get(fileName); 
     if(type.getName().equals("java.lang.Float")){ 
      result=type.cast(java.lang.Float.valueOf(properties.getProperty(propertyName))); 
     }else if(type.getName().equals("java.lang.Long")){ 
      result=type.cast(java.lang.Long.valueOf(properties.getProperty(propertyName))); 
     }else if(type.getName().equals("java.lang.String")){ 
      result=type.cast(java.lang.String.valueOf(properties.getProperty(propertyName))); 
     }else if(type.getName().equals("java.lang.Double")){ 
      result=type.cast(java.lang.Double.valueOf(properties.getProperty(propertyName))); 
     }else if(type.getName().equals("java.lang.Integer")){ 
      result=type.cast(java.lang.Integer.valueOf(properties.getProperty(propertyName))); 
     } 
    }catch(ClassCastException e){ 
     logger.error(CommonUtils.getExceptionTrace(e)); 
    }catch(NullPointerException e){ 
     logger.error(CommonUtils.getExceptionTrace(e)); 
    }catch(Exception e){ 
     logger.error(CommonUtils.getExceptionTrace(e)); 
    } 
    return result; 
} 
+1

你不應該捕捉任何'RuntimeExceptions' –

回答

1

您的代碼似乎是Java內泛型的合理使用。它可以被簡化一些,如下所示。

注意:出於測試的原因,我將您的示例調整爲簡單地解析字符串而不是讀取屬性文件。應該清楚如何撤銷這些更改:

public static <T> T getProperty(String input, Class<T> type) { 

    try { 
    if (type.equals(Float.class)) { 
     return type.cast(Float.valueOf(input)); 
    } else if (type.equals(Long.class)) { 
     return type.cast(Long.valueOf(input)); 
    } else if (type.equals(String.class)) { 
     return type.cast(String.valueOf(input)); 
    } else if (type.equals(Double.class)) { 
     return type.cast(Double.valueOf(input)); 
    } else if (type.equals(Integer.class)) { 
     return type.cast(Integer.valueOf(input)); 
    } 
    } catch (Exception e) { 
    logger.error(CommonUtils.getExceptionTrace(e)); 
    } 
    return null; 
} 

public static void main(String[] args) throws Exception { 
    Integer foo = getProperty("123", Integer.class); 
    System.out.println(foo); 
} 

打印:123

+0

我特別使用類與軟件包,以便他們不會與任何其他類具有相同的名稱,如果任何人創建一個假設 – user155806