我正在开发一个通用实用程序,它应该具有最小的大小和代码重复。 这个代码是好的还是坏的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;
}
答案 0 :(得分: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
。