2019独角兽企业重金招聘Python工程师标准>>>

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

java泛型方法的使用相关推荐

  1. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

  2. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  3. java 抽象泛型方法,Java泛型方法 - Only_小白的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java泛型是java一个重要特性.这里介绍的是Java泛型方法:主要是用于,一般情况下,我们在类定义上做泛型的声明,这样在整个类内部都可以使用泛型,有些情况下,我们不需要整个类做泛型声明,只希望在某 ...

  4. java泛型方法无参_从头再来:Java泛型(开发必须知道的)

    Java泛型 老规矩,测试一下,下面的程序能否正常运行?为什么? 开头测试题 泛型就是实现了参数化类型,也就是代码可以适用于多种类型.泛型是在编译期检查的,在编译期检查类型是否安全.我认为泛型最有用的 ...

  5. Java 泛型方法/接口、泛型限定

    一.为什么要定义泛型方法 1.从泛型类到泛型方法的演变过程 我们先来看个例子 //定义一个泛型类,并定义如下两个方法 class Test<T> {public void show(T t ...

  6. Java泛型方法的定义

    一 点睛 泛型方法主要用于容器类,Java中任何方法,包括静态的(注意,泛型类不允许在静态环境中使用)和非静态的,均可以用泛型来定义,而且和所在类是否是泛型没有关系. 下面是泛型方法的定义 [publ ...

  7. java泛型方法实现要点

    java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.优点是类型安全.消除强制类型转换.提高的运行效率. ...

  8. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

  9. java 泛型方法 泛型类

    泛型方法 /*** 泛型方法的基本介绍* @param tClass 传入的泛型实参* @return T 返回值为T类型* 说明:* 1)public 与 返回值中间<T>非常重要,可以 ...

  10. Java泛型方法与普通成员方法以及案例说明(五)

    我们需要特别指出一下,前面的第二章节有一个抽检品案例中有这样一个方法: 这个方法中虽然有T泛型标识,但是它仅仅是一个普通的成员方法,方法返回类型是T,采用了泛型类的泛型类型. 泛型方法的语法 泛型方法 ...

最新文章

  1. SharedPreferences源码解析
  2. java中打印输出数组内容的三种方式
  3. python 爬取今日头条热点新闻
  4. [剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]
  5. Linux环境下创建运行.java文件
  6. Java 并发基础——线程安全性
  7. 互联网产品生命周期_我市扎实推进全生命周期公共法律服务产品研发
  8. Nginx进程间通讯方式
  9. 电视领域“烧钱”不止,酷开为何反成赢家?
  10. pymol安装教程linux,PyMOL | Pymol绘图教程(一)
  11. MapGIS考试大纲
  12. 3.4 51单片机-矩阵键盘
  13. linux系统取代windows,Linux替代Windows系统软件大比拼
  14. Sketchup创建光滑曲面
  15. 信用卡积分能兑换现金,靠谱吗?
  16. 美团校招笔试题-算法-python
  17. iReport与JasperReport中如何支持文支持显示
  18. SAAS平台的基础,构建多租户系统的思考
  19. mo汇编指令_moshell常用指令描述
  20. AI具备创造力入选Science年度十大科学突破

热门文章

  1. Windows环境下安装Hadoop+Hive的使用案例
  2. 2019年春季学习第七周学习总结
  3. CentOS 7 配置DHCP服务器
  4. React-Native集成dva.js
  5. 第二次作业+105032014049
  6. iOS中使用图片作为颜色的背景图
  7. 【转】snort 笔记2 ----- 规则编写
  8. loadrunner中定义数组
  9. Ubuntu使用技巧集锦(持续追加中……)
  10. 微信支付java后台