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

posted @ 2019-04-07 19:51  oops_w  阅读(151)  评论(0)    收藏  举报