java泛型
知识点:
1.泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法。
2.如果静态方法要使用泛型的话,必须将静态方法也定义成泛型方法 。
3.在java中是”不能创建一个确切的泛型类型的数组”的。
附:学习代码
1 /** 2 * 泛型方法的基本介绍 3 * @param tClass 传入的泛型实参 4 * @return T 返回值为T类型 5 * 说明: 6 * 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。 7 * 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。 8 * 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。 9 * 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。 10 */ 11 public <T> T genericMethod(Class<T> tClass)throws InstantiationException , 12 IllegalAccessException{ 13 T instance = tClass.newInstance(); 14 return instance; 15 } 16 --------------------- 17 //作者:VieLei 18 //来源:CSDN 19 //原文:https://blog.csdn.net/s10461/article/details/53941091 20 //版权声明:本文为博主原创文章,转载请附上博文链接!
1 package com.wsy.test; 2 3 public class Fruit { 4 @Override 5 public String toString() 6 { 7 return "fruit"; 8 } 9 10 }
1 package com.wsy.test; 2 3 public class Apple extends Fruit { 4 @Override 5 public String toString() 6 { 7 return "apple"; 8 } 9 }
1 package com.wsy.test; 2 3 public class Person { 4 @Override 5 public String toString() 6 { 7 return "person"; 8 } 9 }
1 package com.wsy.test; 2 class GenerateTest<T>{ 3 public void show_1(T t){ 4 System.out.println(t.toString()); 5 } 6 7 //在泛型类中声明了一个泛型方法,使用泛型E,这种泛型E可以为任意类型。可以类型与T相同,也可以不同。 8 //由于泛型方法在声明的时候会声明泛型<E>,因此即使在泛型类中并未声明泛型,编译器也能够正确识别泛型方法中识别的泛型。 9 public <E> void show_3(E t){ 10 System.out.println(t.toString()); 11 } 12 13 //在泛型类中声明了一个泛型方法,使用泛型T,注意这个T是一种全新的类型,可以与泛型类中声明的T不是同一种类型。 14 public <T> void show_2(T t){ 15 System.out.println(t.toString()); 16 } 17 //在泛型类中生命一个泛型方法,使用泛型T,使用的是可变参数的 18 public <T> void show_4(T...args) 19 { 20 for(T t :args) 21 { 22 System.out.println(t); 23 } 24 } 25 }
1 package com.wsy.test; 2 3 public class GenericFruit { 4 5 6 7 public static void main(String[] args) { 8 Apple apple = new Apple(); 9 Person person = new Person(); 10 11 GenerateTest<Fruit> generateTest = new GenerateTest<Fruit>(); 12 //apple是Fruit的子类,所以这里可以 13 generateTest.show_1(apple); 14 //编译器会报错,因为泛型类型实参指定的是Fruit,而传入的实参类是Person 15 //generateTest.show_1(person); 16 17 //使用这两个方法都可以成功 18 generateTest.show_2(apple); 19 generateTest.show_2(person); 20 21 //使用这两个方法也都可以成功 22 generateTest.show_3(apple); 23 generateTest.show_3(person); 24 //泛型方法和可变参数的测试 25 generateTest.show_4("123",123,222,"34.2",324.21,'s'); 26 } 27 }
1 package com.wsy.test; 2 import java.util.*; 3 public class Test1 { 4 5 public static void main(String[] args) 6 { 7 List<?>[] lsa = new List<?>[10]; // OK, array of unbounded wildcard type. 8 Object o = lsa; 9 Object[] oa = (Object[]) o; 10 List<Integer> li = new ArrayList<Integer>(); 11 li.add(new Integer(3)); 12 oa[1] = li; // Correct. 13 Integer i = (Integer) lsa[1].get(0); // OK 14 System.out.println(i); 15 // --------------------- 16 // 作者:VieLei 17 // 来源:CSDN 18 // 原文:https://blog.csdn.net/s10461/article/details/53941091 19 // 版权声明:本文为博主原创文章,转载请附上博文链接! 20 } 21 }
参考链接:
https://blog.csdn.net/s10461/article/details/53941091

浙公网安备 33010602011771号