根据泛型类型动态返回对象

public <T extends PackObject> T  unPackMessage(String interfaceCode, String respValue, Class<T>  clazz, String sysType) throws IOException {
log.info(">> unPackMessage start, interfaceCode is {}, respValue is {}", interfaceCode, respValue);
Map<String, Object> result = null;
// get pack_convert.prop file content
PackConvertMessage packConvertMessage = getPackConvertFileContent();
String func = packConvertMessage.getInterfaceMapping().get(interfaceCode);
if (StringUtils.isBlank(func)){
log.error("<< unPackMessage error, No response message with current interface configured");
return null;
}
String respSerialNumber = packConvertMessage.getRespFuncMapping().get(func);
String currPackType = PackConvertConstant.SystermType.CLIENT.equals(sysType) ? client_pack_type : pack_type;
switch (currPackType){
case PackConvertConstant.PackType.NON_FIXED_LENGTH:
result = unpackNoFixedMessage(respValue, connect_char, respSerialNumber, PACK_CONVERT_FILE_MAPPING_SEPARATOR, sysType);
break;
case PackConvertConstant.PackType.FIXED_LENGTH:
result = unpackFixedMessage(respValue, respSerialNumber, PACK_CONVERT_FILE_MAPPING_SEPARATOR);
break;
case PackConvertConstant.PackType.XML:
result = unpackXmlMessage(respValue, respSerialNumber, PACK_CONVERT_FILE_MAPPING_SEPARATOR);
break;
case PackConvertConstant.PackType.JSON:
result = unpackJsonMessage(respValue, respSerialNumber);
break;
}
log.info("<< unPackMessage success, return value is {}", JSON.toJSONString(result));
T t = JSON.toJavaObject(JSON.parseObject(JSON.toJSONString(result)), clazz);
return t;
}

根据泛型类型动态返回集合

 public <E extends BaseLiquidation, T extends BaseLiquidation> List<E> convertFileToObj(String localFilePath, Class<E> clazz, Class<T> tclazz) throws IOException, NoSuchMethodException, IllegalAccessException, InstantiationException {
logger.info(">> convertFileToObj, localFilePath is {}, clazz is {}", localFilePath, clazz.getName());
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(localFilePath),"utf-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null){
sb.append(line);
sb.append(System.getProperty("line.separator"));
}
List<E> result = messageToObj(sb.toString(), clazz);
logger.info("<< convertFileToObj end");
return result;
}
public <E extends BaseLiquidation> List<E> convertFileToObj(String localFilePath, Class<E> clazz) throws IOException, NoSuchMethodException, IllegalAccessException, InstantiationException {
logger.info(">> convertFileToObj, localFilePath is {}, clazz is {}", localFilePath, clazz.getName());
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(localFilePath),"utf-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null){
sb.append(line);
sb.append(System.getProperty("line.separator"));
}
List<E> result = messageToObj(sb.toString(), clazz);
logger.info("<< convertFileToObj end");
return result;
}

泛型方法基本介绍

  • public与返回值中间的<T>非常重要,表示此方法声明为泛型方法
  • 只有声明了<T>的方法才是泛型方法,泛型类中使用了泛型的成员方法并不能算是泛型方法
  • <T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T
  • 与泛型类的定义一样,T可以随便写成任意标识,比如T、E、K、V、S等

泛型限制上下边界

  • 泛型限制上边界:传入的类型只能是指定类的子类,比如Class<? extend PackObject>
  • 泛型限制下边界:传入的类型只能是指定类的父类,比如DiagnosticListener<? super JavaFileObject>

另外附常用泛型标识说明

  • 常见的一些泛型标识就是T(类型)、E(元素)、K(key)、V(value)、?(通配符,不确定的)这几个,其实填任何字母都行

最新文章

  1. Jmeter正则表达式
  2. 内置对象session ,cookic,Application,ViewState
  3. Http Header里的Content-Type
  4. Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具
  5. RMQ(范围最值问题)算法学习
  6. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用
  7. Asteroids(匈牙利算法入门)
  8. JavaWeb学习总结(十二)--事务
  9. PHPWord生成word实现table合并(colspan和rowspan)
  10. jQuery Mobile 开发中常见的问题
  11. return File
  12. Repeater绑定数据库
  13. 解决Qt4.8.6+VS2010运行程序提示 FTH: (6512): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes
  14. angular中要注意的指令
  15. [android] 采用aidl绑定远程服务
  16. JAVA使用log4j(另SSM框架中使用log4j)
  17. Samsung_tiny4412(驱动笔记02)----ASM with C,MMU,Exception,GIC
  18. java abstract构造函数调用
  19. MongoDb进阶实践之九 Mongodb的备份与还原
  20. KVM虚拟机管理——虚拟机创建和操作系统安装

热门文章

  1. Scope &#39;request&#39; is not active for the current thread
  2. LC 646. Maximum Length of Pair Chain
  3. Mybaits-Maven项目之逆向工程(代码自动生成)
  4. 小D课堂 - 零基础入门SpringBoot2.X到实战_汇总
  5. Jmeter接口测试图文示例
  6. dbgrid中移动焦点到指定的行和
  7. Delphi GetDir 获取指定驱动器的当前路径名
  8. SQL-T
  9. PJzhang:python基础入门的7个疗程-three
  10. C++学习笔记-引用