Java泛型理解
Java泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。当需要使用某一种算法时,又无法具体算法的数据类型,或者想指定类型值的上限或下限,那么这时就需要Java泛型来大显身手了!
泛型方法的规则:
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。
- 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。
实例:
一、定义一个泛型方法来打印对象数组元素
public static <E> void printArray(E[] inputArray){ for(E elements:inputArray){ System.out.print(elements); } } public static void main(String[] args){ Integer[] intArray={4,5,6,5,8}; Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "整型数组元素为:" ); printArray( intArray ); System.out.println( "\n双精度型数组元素为:" ); printArray( doubleArray ); System.out.println( "\n字符型数组元素为:" ); printArray( charArray ); }
二、定义一个泛型方法来对数字进行排序(extends 使用)
public static <E extends Comparable> E searchMaxnumber(E x,E y,E z){ E maxNumber=x; if(y.compareTo(maxNumber) > 0){ maxNumber=y; } if(z.compareTo(maxNumber)>0){ maxNumber=z; } return maxNumber; } public static void main(String[] args){ System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n", 3, 4, 5, searchMaxnumber( 3, 4, 5 ) ); System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n", 6.6, 8.8, 7.7, searchMaxnumber( 6.6, 8.8, 7.7 ) ); System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear", "apple", "orange", searchMaxnumber( "pear", "apple", "orange" ) ); }
三、泛型类的定义
public class GenericityExam<E> { private E e; public E get(){ return e; } public void put(E e){ this.e=e; } public static void main(String[] args) { GenericityExam<Integer> integerVal = new GenericityExam<Integer>(); GenericityExam<Character> charVal = new GenericityExam<Character>(); integerVal.put(new Integer(10)); charVal.put(new Character('s')); System.out.printf("整型值为 :%d\n", integerVal.get()); System.out.printf("字符为 :%c\n", charVal.get()); } }
四、类型通配符上限泛型
public static <E> void listGen(List<? extends E> data){<br /> for(E listData:data){<br /> System.out.println("data :" + listData);<br /> }<br />}<br /><br />public static void main(String[] args) {<br /> List<Integer> listIn = new ArrayList<>();<br /> List<Number> listNu = new ArrayList<>();<br /><br /> listIn.add(18);<br /> listIn.add(45);<br /> listNu.add(314);<br /> listNu.add(789);<br /><br /> listGen(listIn);<br /> listGen(listNu);<br />}
- <? extends E>表示该通配符所代表的类型是E类型的子类。
- <? super E>表示该通配符所代表的类型是E类型的父类。
泛型定义好后,在运行期间会变化为Object类型。
相关推荐
zhangxiafll 2020-11-13
anglehearts 2020-08-17
xiaoxiaoCNDS 2020-06-25
TreasureZ 2020-06-16
lantingyue 2020-05-31
iconhot 2020-05-26
luohui 2020-04-29
fraternityjava 2020-04-29
yicuncuntu0 2020-04-19
Justhavefun 2020-02-21
alicelmx 2020-02-13
iconhot 2020-01-28
yicuncuntu0 2019-12-18
wxy0 2019-12-09
丁一鸣的CSDN 2011-06-25
iosJohnson 2019-11-05