`
perfy315
  • 浏览: 412220 次
社区版块
存档分类
最新评论

java泛型方法的使用

阅读更多
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) {
        NoticeService noticeService=CommonService.getService(NoticeService.class);//正确的使用第一种泛型方法,不会出现编译错误。
        NoticeService noticeService=CommonService.getService(UserService.class);//不正确的使用第一种泛型方法,会出现编译错误。
      
    }
}
对第二种泛型方法使用:
public class Main {
    public static void main(String[] args) {
        NoticeService noticeService=CommonService.getService(NoticeService.class);//正确的使用第二种泛型方法,不会出现编译错误,逻辑也正确,运行时不会出现异常。
        NoticeService noticeService=CommonService.getService(UserService.class);//不正确的使用第二种泛型方法,不会出现编译错误,但逻辑不正确,运行时会出现异常,危险!
 
    }
}
现在知道了这两种极其相似的泛型方法的区别了吧?
第一种泛型方法:返回值和参数值的类型是一致,推荐使用;
第二种泛型方法:返回值和参数值的类型不是一致,请谨慎或避免使用。
转:http://blog.sina.com.cn/s/blog_617a491c0100eox7.html
分享到:
评论

相关推荐

    java 泛型方法使用示例

    java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例

    Java泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    java 泛型接口示例

    java 泛型接口示例 java 泛型接口示例 java 泛型接口示例

    java 泛型的使用 详细讲解

    java 泛型的使用 详细讲解

    java 泛型类的类型识别示例

    java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例

    Java泛型使用详细分析.pdf

    Java泛型使用详细分析.pdf

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    Java泛型实例

    Java泛型,泛型接口、泛型方法实例

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    Java泛型应用实例

    网上很多讲泛型原理的文章, 很少有提到我们什么时候使用泛型有优势, 我就泛型类和方法搞了两个实例,算是探索下泛型使用的冰山一角吧,在我博客里面有配套的文章,可以配套看.

    java泛型的使用

    自己写的一些关于java泛型的一些例子,感觉里面应该写的挺全了。希望有助于大家的学习.不足之处多多指教.

    java泛型学习ppt

    java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java 泛型擦除后的三种补救方法

    Java中的泛型,在运行时刻其具体类型是被擦除的,这样我们就不能用new T(),instanceof等关操作,特别是对泛型类型的类的实例化问题,在此根据《Thinking in Java》中所讲的对类型擦除所带来问题的三种解决方案,比较...

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

Global site tag (gtag.js) - Google Analytics