这一章节我们来讨论一下泛型方法的使用。
泛型除了可以作用在类、接口上面,还可以作用在方法上面。
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 --泛型编程 课件 同时可结合《java 程序员教程》这本书
JAVA设计模式--程序设计--反射--注解--泛型
05-java泛型的使用.doc
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”...
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。
03-Java集合-泛型面试题(24题)-新增
而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本
超全面javaweb教程第7天-_07_泛型方法和泛型类的使用
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
【Java基础】泛型方法 - 右撇子 - 博客频道 - CSDN.NET
包含代码,实验案例,课件(泛型的基本概念、泛型的定义和类型参数、泛型类和泛型接口,泛型委托和泛型事件)
java基础-泛型通配符
1、Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。...
面向对象程序设计201603-编写泛型函数1
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490705
Java中的泛型方法演示代码
( 例如,a为{2,1,2,2}, b为{1,0,0,1} ),编写带有泛型传递参数的程序求: 统计a中包含多少种不同的值。(如上述例子中,a中包含2和1两种不同的数)(求秩) a中每一个数与b中同一位置的数称为对应关系,统计a中每种数...
C语言在泛型这一块确实不行,哈,但我就是喜欢泛型啊。 用宏定义做的C语言泛型,提供一个思路给大家。