源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

多个java泛型示例分享

  • 时间:2020-09-27 07:44 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:多个java泛型示例分享
[b]1.泛型类[/b] 1.1普通泛型
[u]复制代码[/u] 代码如下:
package test.lujianing; /**  * 泛型类  * @param <T>  */ class Test<T>{     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<Integer> t1 = new Test<Integer>();         t1.setValue(5);         Integer i = t1.getValue();         System.out.println(i);         //测试Double泛型         Test<Double> t2 = new Test<Double>();         t2.setValue(5.55D);         Double d = t2.getValue();         System.out.println(d);         //测试String泛型         Test<String> t3 = new Test<String>();         t3.setValue("hello world");         String str =t3.getValue();         System.out.println(str);     } }
输出结果:
[u]复制代码[/u] 代码如下:
java.lang.Integer 5 java.lang.Double 5.55 java.lang.String hello world
[b]1.2 K/V泛型[/b]
[u]复制代码[/u] 代码如下:
package test.lujianing; import java.util.HashMap; import java.util.Map; /**  * Created by Administrator on 14-3-30.  */ class TestKV<K,V>{     private Map<K,V> map=new HashMap<K, V>();     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<String,String> t = new TestKV<String, String>();         t.put("name","jianing");         System.out.println(t.get("name"));         TestKV<String,Integer> t2 = new TestKV<String, Integer>();         t2.put("age",24);         System.out.println(t2.get("age"));     } }
输出结果:
[u]复制代码[/u] 代码如下:
jianing 24
[b]2.泛型接口[/b]
[u]复制代码[/u] 代码如下:
package test.lujianing; /**  * 泛型接口  * @param <T>  */ public interface TestImpl<T> {     public void setValue(T t);     public T getValue(); }
输出结果:
[u]复制代码[/u] 代码如下:
1 hello word
3.泛型方法
[u]复制代码[/u] 代码如下:
package test.lujianing; /**  * 泛型方法类  */ class TestMethod{     /**      * 泛型方法      */     public <T>T getValue(Object s,Class<T> 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);     } }
输出结果:
[u]复制代码[/u] 代码如下:
java.lang.Integer 30 java.lang.Double 40.0022
[b]4.限制泛型[/b] 在上面的例子中,没有限制class Test<T>类型持有者T的范围,默认限定类型相当于Object。比如我们要限制T为数字接口类型。只需要这么做:class Test<T extends Number>,这样类中的泛型T只能是Number接口的实现类,传入非Number接口编译会出错。 [b]5.通配泛型[/b]
[u]复制代码[/u] 代码如下:
package test.lujianing; import java.util.HashMap; import java.util.Map; /**  * 通配泛型  */ public class TestFive {     public static void main(String[] args) {         Map<String,Class<? extends Number>> map = new HashMap<String,Class<? extends Number>>();         map.put("Integer",Integer.class);         map.put("Double",Double.class);         for (Map.Entry<String,Class<? extends Number>> entry : map.entrySet()) {             System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());         }     } }
输出结果:
[u]复制代码[/u] 代码如下:
key:Double value:class java.lang.Double key:Integer value:class java.lang.Integer
简单的例子:针对1.1的例子
[u]复制代码[/u] 代码如下:
public static void main(String[] args) {         //测试Integer泛型         Test<Integer> t1 = new Test<Integer>();         t1.setValue(5);         fun(t1);         //测试Double泛型         Test<Double> t2 = new Test<Double>();         t2.setValue(5.55D);         fun(t2);     }     public static void fun(Test<?> t){         System.out.println("通配泛型"+t.getValue());     }
输出结果:
[u]复制代码[/u] 代码如下:
java.lang.Integer 通配泛型5 java.lang.Double 通配泛型5.55
6.补充 在泛型中,可能会遇到<T><E>等,T和E分别是Type和Element的首字母。E一般用来表示集合类型中的元素的类型,例如List接口的定义,public interface List<E> extends Collection<E>。这只是一种命名习惯,两者没有本质区别。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部