java - 泛型用法和 Java 标准

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

最佳答案

您的代码似乎是在 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

关于java - 泛型用法和 Java 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22806648/

相关文章:

java - Enum 的 valueOf 方法

java - 如何在 springboot 的 ConversionService 中 Autowiring

java - 动态类型检查匹配类型参数

java - Java 通配符泛型 <?> 的 .NET 等效项具有协方差和逆方差?

c# - 如何在工厂中使用通用接口(interface)

Java 嵌套类——幕后?

Java标签语句和goto

java - 为什么下载的 pdf 文件已损坏?

swift - 如何将类类型作为函数参数传递

c# - 有没有办法将泛型类型参数限制为匿名类型?