您的位置:首页 > 编程语言 > Java开发

从头认识java-13.4 泛型方法的使用

2015-12-11 16:34 513 查看
这一章节我们来讨论一下泛型方法的使用。
泛型除了可以作用在类、接口上面,还可以作用在方法上面。
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();

@Override
public 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++;

@Override
public 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

总结:这一章节主要展示了泛型方法的使用。

这一章节就到这里,谢谢。
-----------------------------------
目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java