从头认识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