博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java泛型方法的使用
阅读量:6954 次
发布时间:2019-06-27

本文共 1743 字,大约阅读时间需要 5 分钟。

hot3.png

java泛型方法在方法返回值是容器类对象时广泛使用。
public static List<T> find(Class<T> clazz,String userId){
 
 
 
 
 ....
}
一般来说编写java泛型方法时,返回值类型和至少
参数
类型应该是泛型,而且类型
应该是
一致的,如果只有返回值类型或参数类型之一使
用了泛型,这个泛型方法
的使用就大大的限制了,基本限制
到跟不用泛型一样的程度。
下面主要介绍两种十分相似的java泛型方法的使用以及
它们之间的区别。
第一种:
 
 
 
 
public static <T extends CommonService> T getService(Class<T> clazz)
 {
 
 
 
  
 
 
 T service = (T) serviceMap
.get(clazz.getName());
 
 
 
  
 
 
 if (service == null) {
 
 
 
  
 
 
  
 
 
 service = (T) ServiceLocator.getService(clazz.getName());
 
 
 
  
 
 
  
 
 
 serviceMap.put(clazz.getName(), service);
 
 
 
  
 
 
 }
 
 
 
  
 
 
 return service;
 
 
 
 }
第二种:
 
 
 
 
public static <T> T getService(Class<? extends CommonService> clazz)
 {
 
 
 
  
 
 
 T service = (T) serviceMap.get(clazz.getName());
 
 
 
  
 
 
 if (service == null) {
 
 
 
  
 
 
  
 
 
 service = (T) ServiceLocator.getService(clazz.getName());
 
 
 
  
 
 
  
 
 
 serviceMap.put(clazz.getName(), service);
 
 
 
  
 
 
 }
 
 
 
  
 
 
 return service;
 
 
 
 }
下面是泛型方法所在的类:
public abstract class CommonService {
 
 
 
 private static HashMap<String, CommonService> serviceMap = new HashMap<String, CommonService
>();
 
 
 
 //这里是泛型方法定义
 
 
 
 .
 
 
 
 .
 
 
 
 .
}
这两个泛型方法只有方法的签名不一样,方法体完全相同,那它们有什么不一样呢?
我们来使用一下它们,就知道它们的区别了。
对第一种泛型方法使用:
public class Main {
 
 
 
 public static void main(String[] args) {
 
 
 
 
 
 
 
 Noti
ceService
 noticeService
=CommonService
.getService
(NoticeService
.class);//正确的使用第一种泛型方法,不会出现编译错误。
 
 
 
 
 
 
 
 NoticeService 
noticeService
=
Com
monService
.getService
(UserService
.class);//
正确的使用第一种泛型方法,
会出现编译错误。
 
 
 
 
 
 
 
 
 
 
 }
}
对第二种泛型方法使用:
public class Main {
 
 
 
 public static void main(String[] args) {
 
 
 
 
 
 
 
 NoticeService noticeService=CommonService.getService(NoticeService.class);//正确的使用第二种泛型方法,不会出现编译错误,逻辑也正确,运行时不会出现异常。
 
 
 
 
 
 
 
 NoticeService noticeService=CommonService.getService(UserService.class);//
正确的使用第二种泛型方法,不会出现编译错误,
但逻辑不正确,运行时会出现异常,危险!
 
 
 
 
 
 }
}
现在知道了这两种
极其相似的泛型方法的区别
了吧?
第一种泛型方法:返回值
和参数值的类型是一致,推荐使用;
第二种泛型方法:返回值和
参数值的类型不是一致,
请谨慎或避
免使用。

转载于:https://my.oschina.net/amoshuang/blog/124333

你可能感兴趣的文章
TCP协议疑难杂症全景解析
查看>>
redis 1
查看>>
Python安装pycurl失败,及解决办法
查看>>
cocos2d的常用动作及效果总结之四:Special Actions
查看>>
[ lucene扩展 ] MoreLikeThis 相似检索
查看>>
如果返回结构体类型变量(named return value optimisation,NRVO)
查看>>
C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
查看>>
基于shiro授权过程
查看>>
JQuery对象和DOM对象的区别与转换
查看>>
使用 Toad 实现 SQL 优化
查看>>
.NET开发技巧——从Winform穿越到WPF
查看>>
2135亿背后的双11项目协作怎么玩?
查看>>
DRDS SQL 审计与分析——全面洞察 SQL 之利器
查看>>
微信小程序:模板消息推送实现
查看>>
CodePush自定义更新弹框及下载进度条
查看>>
自己总结的php开发中用到的工具
查看>>
小程序视频或音频自定义可拖拽进度条
查看>>
PHP导出超大的CSV格式的Excel表方案
查看>>
Mac 环境下如何生成Git shh key
查看>>
jenkins 使用磁盘检查插件 disk check plugin
查看>>