【Java基础】泛型方法
来源:互联网 发布:c语言 sleep 1 编辑:程序博客网 时间:2024/05/16 00:34
http://blog.csdn.net/feng88724/article/details/8792891
JDK1.5中引入了泛型(Generic)机制。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型方法典型用法, Collections类中的sort方法:
- public static <T> void sort(List<T> list, Comparator<? super T> c)
这就是泛型方法。如果没有这个<T>的定义,在后面参数中使用泛型就会报错。
基本用法 :
- public static <M> List<M> findAll(Class<M> m)
- public static <M extends Model> List<M> findAll(Class<M> m)
一般来说编写Java泛型方法时,返回值类型和至少一个参数类型应该是泛型,而且类型应该是一致的,如果只有返回值类型或参数类型之一使用了泛型,这个泛型方法的使用就大大的限制了,基本限制到跟不用泛型一样的程度。
#1 比如返回值没有使用泛型:
- public static <M> boolean save(M m)
- public static <M extends Model> boolean save(M m)
此时完全可以不要泛型方法, 写成:
- public static boolean save(Object m)
- public static boolean save(Model m)
#2 比如参数不使用泛型
这种情况都不知道怎么写.. 更没意义
(以下写法都是错误的)(不使用泛型方法定义的泛型, 另外定义了一个)
public static <M> List<M> findAll(Class<?> m)
public static <M> List<M> findAll(Class<? extends Model> m)
public static <M> List<M> findAll(Class<? super Model> m)
编译可通过, 但参数与返回值非同一类型。(潜在错误,容易造成运行时异常)
顺便说一下;
“?”代表未知类型
extends关键字声明了类型的上界,表示参数的类型可能是所指定的类型,或者是此类型的子类
super关键字声明了类型的下界,表示参数的类型可能是所指定的类型,或者是此类型的父类型,直至Object
所以,使用泛型方法,返回值类型和至少一个参数类型应该是泛型,而且类型应该一致。以达到通过参数类型指定返回值类型的效果。
理解有误的话还请各位指出。
- 【Java基础】泛型方法
- 【Java基础】泛型方法
- Java基础泛型Static方法
- 【Java基础】Java方法
- java基础加强--自定义泛型方法及其应用
- Java基础 泛型基础
- java 方法基础
- JAVA基础/构造方法
- [Java基础] 方法
- java基础-构造方法
- Java 基础:hashCode方法
- java基础--方法
- java基础 构造方法
- Java基础---方法,数组
- 一些java基础方法
- Java基础06方法
- Java基础 方法
- Java基础静态方法
- android 5.0 以上版本 c++调用java 崩溃问题
- 你的程序员是一种什么样的怪物?—兄弟连IT教育
- 黑马程序员----IO流学习笔记
- 搜索引擎—网络爬虫抓取策略
- Android浏览器应用搜索输入框被输入法遮挡问题
- 【Java基础】泛型方法
- 单链表的基础操作java实现
- ossec的配置及批量安装
- CATALINA_HOME和CATALINA_BASE
- C语言基础——指针
- CodeTyphon32中自带例子源码:5行代码取得所有进程列表。
- 命令行退出python方法
- UICollection布局
- 深入剖析scala的App特质