多个java泛型示例分享
本文导语: 1.泛型类 1.1普通泛型 代码如下:package test.lujianing;/** * 泛型类 * @param */class Test{ private T obj; public void setValue(T obj){ this.obj =obj; } public T getValue(){ System.out.println(obj.getClass().getName()); ...
1.泛型类
1.1普通泛型
package test.lujianing;
/**
* 泛型类
* @param
*/
class Test{
private T obj;
public void setValue(T obj){
this.obj =obj;
}
public T getValue(){
System.out.println(obj.getClass().getName());
return obj;
}
}
/**
* 测试泛型类
*/
public class TestOne {
public static void main(String[] args) {
//测试Integer泛型
Test t1 = new Test();
t1.setValue(5);
Integer i = t1.getValue();
System.out.println(i);
//测试Double泛型
Test t2 = new Test();
t2.setValue(5.55D);
Double d = t2.getValue();
System.out.println(d);
//测试String泛型
Test t3 = new Test();
t3.setValue("hello world");
String str =t3.getValue();
System.out.println(str);
}
}
输出结果:
java.lang.Integer
5
java.lang.Double
5.55
java.lang.String
hello world
1.2 K/V泛型
package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Administrator on 14-3-30.
*/
class TestKV{
private Map map=new HashMap();
public void put(K k, V v) {
map.put(k,v);
}
public V get(K k) {
return map.get(k);
}
}
public class TestFour{
public static void main(String[] args) {
TestKV t = new TestKV();
t.put("name","jianing");
System.out.println(t.get("name"));
TestKV t2 = new TestKV();
t2.put("age",24);
System.out.println(t2.get("age"));
}
}
输出结果:
jianing
24
2.泛型接口
package test.lujianing;
/**
* 泛型接口
* @param
*/
public interface TestImpl {
public void setValue(T t);
public T getValue();
}
输出结果:
1
hello word
3.泛型方法
package test.lujianing;
/**
* 泛型方法类
*/
class TestMethod{
/**
* 泛型方法
*/
public T getValue(Object s,Class clazz) {
System.out.println(clazz.getName());
T t =null;
if(clazz.getName().equals("java.lang.Integer")){
Double d = Double.parseDouble(s.toString());
int i =d.intValue();
t=(T)new Integer(i);
}
if(clazz.getName().equals("java.lang.Double")){
t=(T)new Double(s.toString());
}
return t;
}
}
/**
* 泛型方法测试类
*/
public class TestThree {
public static void main(String[] args) {
TestMethod t = new TestMethod();
int i =t.getValue("30.0011",Integer.class);
System.out.println(i);
double d =t.getValue("40.0022",Double.class);
System.out.println(d);
}
}
输出结果:
java.lang.Integer
30
java.lang.Double
40.0022
4.限制泛型
在上面的例子中,没有限制class Test类型持有者T的范围,默认限定类型相当于Object。比如我们要限制T为数字接口类型。只需要这么做:class Test,这样类中的泛型T只能是Number接口的实现类,传入非Number接口编译会出错。
5.通配泛型
package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
* 通配泛型
*/
public class TestFive {
public static void main(String[] args) {
Map