泛型用法和java标准

时间:2014-04-02 09:12:50

标签: java generics

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

答案 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