Java Generics(泛型)
来源:互联网 发布:淘宝售后电话是多少 编辑:程序博客网 时间:2024/05/25 21:34
Java泛型是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数。
泛型类
泛型类是我们最经常使用的泛型形式了,如下:
/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil<T> { /** * if-else替代 * @param condition 条件 * @param t1 对象1 * @param t2 对象2 * @return 结果 */ public T ifThenElse(boolean condition, T t1, T t2) { if (condition) { return t1; } return t2; }}
一个工具类,当前用来代替if-else
使用方法也很简单
public class Main { public static void main(String[] args) { double res = new ToolsUtil<Double>().ifThenElse(1 > 2, 1.0, 2.0); System.out.println(res); }}
泛型方法
随着需求越来越多,工具类 ToolsUtil
可能需要增加很多的工具类,但是并非其他的方法的参数返回值等都是 T
,我们需要进行粒度调整,这时候就是泛型方法表现的时候了。
/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil { /** * if-else替代 * @param condition 条件 * @param t1 对象1 * @param t2 对象2 * @param <T> 类型 * @return 结果 */ public <T> T ifThenElse(boolean condition, T t1, T t2) { if (condition) { return t1; } return t2; } /** * 检查Email * * @param email * email * @return 是否是合法邮件 */ public static boolean checkEmail(String email) { boolean result = false; //some code about checking email string return result; }}
上面的代码我们使用泛型方法将 ifThenElse
函数的独立出来了,不再必须在创建 ToolsUtil
类时必须指定了。
使用方法依旧相对容易:
public class Main { public static void main(String[] args) { double res = new ToolsUtil().ifThenElse(1 > 2, 1.0, 2.0); System.out.println(res); boolean checkRes = new ToolsUtil().checkEmail("app@codeboy.me"); System.out.println(checkRes); }}
可以看出创建 ToolsUtil
的时候不需要再指定类型了,代码看起来清爽了很多。
我们经常将工具类的方法写成静态下,当然泛型方法也是可以的:
/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil { /** * 检查Email * * @param email * email * @return 是否是合法邮件 */ public static boolean checkEmail(String email) { boolean result = false; //some code about checking email string return result; } /** * if-else替代 * @param condition 条件 * @param t1 对象1 * @param t2 对象2 * @param <T> 类型 * @return 结果 */ public static <T> T ifThenElse(boolean condition, T t1, T t2) { if (condition) { return t1; } return t2; }}
使用更加的简洁,操作如下:
public class Main { public static void main(String[] args) { double res = ToolsUtil.ifThenElse(1 > 2, 1.0, 2.0); System.out.println(res); boolean checkRes = ToolsUtil.checkEmail("app@codeboy.me"); System.out.println(checkRes); }}
需要注意的一点是 <T>
必须在 修饰词
(public private static final等)和返回值
之间
总结
泛型方法在什么时候使用呢?
①类型约束只是在局部
泛型的作用于不是针对全局,而仅仅是针对局部的时候,如 ToolsUtil
类
②静态方法需要处理泛型
如上面例子中的ifThenElse
,普通的静态方法是不能使用泛型的。
更多文章请访问小胖轩
0 0
- Java泛型(Generics)
- Java泛型(Generics Type)
- java基础-generics 泛型
- Java Generics(泛型)
- Java泛型Generics
- Java 泛型(Generics) 综述
- Java泛型(Generics)
- java 泛型Generics
- java 5.0, generics, 泛型, 注释
- java中的Generics(泛型)
- Java Generics
- JAVA Generics
- 泛型 Generics
- 泛型generics
- 泛型Generics
- 泛型(Generics)
- Java泛型(Generics)解析,中英文指南
- java泛型 generics --- 第四部分 类型推断
- Python文件夹与文件的操作
- Java追加文件内容的三种方法
- ReentrantLock代码剖析之ReentrantLock.lock
- HDU2544(最短路)
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
- Java Generics(泛型)
- C++二叉树左右孩子的交换
- RedHat For Linux虚拟机与主机共享文件
- How to Install Docker on Ubuntu 14.04 LTS
- 黑马程序员——java基础---IO流
- 快速排序
- postgresql热备份与恢复
- POJ 1125 Stockbroker Grapevine
- poj 2431 Expedition 贪心+优先队列 很好很好的一道题!!!