从头认识java-13.4 泛型方法的使用
来源:互联网 发布:银欣乌鸦2e 数据 编辑:程序博客网 时间:2024/06/05 01:04
这一章节我们来讨论一下泛型方法的使用。
泛型除了可以作用在类、接口上面,还可以作用在方法上面。
1.例子
package com.ray.ch13;public class Test {public <T> void test(T x) {System.out.println(x.getClass().getName());}public static void main(String[] args) {Test test = new Test();test.test("1");test.test(1);test.test(1.0);}}
输出:
java.lang.String
java.lang.Integer
java.lang.Double
上面的test方法类似被无限重写的效果。
注意:在void前面需要加上<T>的泛型标识符。
2.可变参数
package com.ray.ch13;public class Test {public static <T> void test(T... x) {for (T item : x) {System.out.println(item.getClass().getName());}}@SuppressWarnings("unchecked")public static void main(String[] args) {test(1, "2", 0.5, 1l, 2f);}}
输出:
java.lang.Integer
java.lang.String
java.lang.Double
java.lang.Long
java.lang.Float
从上面的方法可以看出,泛型同样也是支持可变参数的。
3.我们利用上一章节的生成器,来填充一个泛型的容器。
生成器代码:
package com.ray.ch13;import java.util.Random;public class MyGenerator implements Generator<Father> {private Class<?>[] classes = { Sub1.class, Sub2.class, Sub3.class };private Random random = new Random();@Overridepublic Father next() {Father father = null;try {father = (Father) classes[random.nextInt(3)].newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return father;}}interface Generator<T> {T next();}class Father {private static int counter = 0;private final int id = counter++;@Overridepublic String toString() {return "name:" + getClass().getSimpleName() + " id:" + id;}}class Sub1 extends Father {}class Sub2 extends Father {}class Sub3 extends Father {}
测试代码:
/** * */package com.ray.ch13;import java.util.ArrayList;import java.util.Collection;/** * @Package:com.ray.ch13 * * @TODO * * @date 2015 12 11 * * @time 16:25:52 * * @author JMSCADMIN * * @version 1.0 */public class Test {public static Collection<Father> fill(Collection<Father> collection,Generator<Father> generator, int count) {for (int i = 0; i < count; i++) {collection.add(generator.next());}return collection;}public static void main(String[] args) {Collection<Father> collection = fill(new ArrayList<Father>(),new MyGenerator(), 5);for (Father father : collection) {System.out.println(father);}}}
输出:
name:Sub2 id:0
name:Sub3 id:1
name:Sub3 id:2
name:Sub1 id:3
name:Sub3 id:4
总结:这一章节主要展示了泛型方法的使用。
这一章节就到这里,谢谢。
-----------------------------------
目录
1 0
- 从头认识java-13.4 泛型方法的使用
- 从头认识java-13.3 泛型接口的使用
- 从头认识java-13.7 什么时候使用泛型?
- 从头认识java-8.8 使用匿名内部类改造7.8章节的工厂方法
- 从头认识java-15.2 Collection的常用方法(1)
- 从头认识java-13.15 使用泛型时出现的问题(1)-泛型不能使用基础类型
- 从头认识java-10.7 使用异常的限制汇总
- 从头认识java-15.3 使用HashSet需要注意的地方
- 从头认识java-15.4 使用TreeSet需要注意的地方
- 从头认识java-15.5 使用LinkedHashSet需要注意的地方
- 从头认识java-4.2 方法重载
- 从头认识java-18.3 什么时候使用同步?
- 从头认识java-13.5 利用泛型构建复杂模型
- 从头认识java-13.1 泛型与容器(容器的演变)
- 从头认识java-4.6 成员的初始化
- 从头认识java-11.1 不变的字符串
- 从头认识java-13.10 边界的作用
- 从头认识java-目录
- mybatis批量操作
- 面试中的智力题及编程实践
- 使用UICollectionView和UITableView混合布局,完成简单天气demo
- C++ Primer Plus第六版 第十六章 编程练习答案
- nginx 反向代理 time-out
- 从头认识java-13.4 泛型方法的使用
- Java EE项目中的异常处理 (实在写的太好了,导致我非法转载!!!)
- iOS字符串大小写转换
- Linux服务器集群系统介绍
- linux(x64)下安装Matlab 2015b破解版(含安装包)
- 二级以上(包括)界面隐藏TabBar
- Android 百分比适配,轻松解决适配问题
- docker【2】 docker安装 Install Docker Engine
- Fragment 模仿QQ页面之间的转换