java泛型
package com.example.generic;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
public class GenericMethodTest {
@Test
public void testGenericWildcard(){
List<?> list=new ArrayList<>();
list.add(null);
List<Integer> list1=new ArrayList<>();
list1.add(127);
getUpperNumber(list1);
List<Number> list2=new ArrayList<>();
list2.add(128);
getUpperNumber1(list2);
List<String> list3=new ArrayList<>();
list3.add(new String("abc"));
getUpperNumber2(list3);
}
public void getUpperNumber(List <? extends Number> data){
System.out.println(data.get(0));
}
public void getUpperNumber1(List <? super Number> data){
System.out.println(data.get(0));
}
public void getUpperNumber2(List <? extends Comparable> data){
System.out.println(data.get(0));
}
public static void test(List<?> list){
}
public <T> void test2(List<T> list){
}
@Test
public void testGenericExtend(){
ArrayList<Number> list= new ArrayList<>();
ArrayList<Integer> list1= new ArrayList<>();
List<Number> list3= new ArrayList<>();
ArrayList<Number> list4= new ArrayList<>();
list3=list4;
List<Number> list5= new ArrayList<>();
ArrayList<Integer> list6= new ArrayList<>();
ArrayList<?> list7= new ArrayList<>();
ArrayList<Number> list8= new ArrayList<>();
list7=list8;
ArrayList<?> list9= new ArrayList<>();
ArrayList<Number> list10= new ArrayList<>();
ArrayList<Integer> list11= new ArrayList<>();
ArrayList<String> list12= new ArrayList<>();
list9=list10;
list9=list11;
list9=list12;
}
public static <E> void printArray(E[] inputArray){
for (E element:inputArray){
System.out.printf("%s ",element);
}
}
@Test
public void testGeneric(){
Integer[] intArray={1,2,3,4,5};
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("双精度数组的元素:");
printArray(doubleArray);
System.out.println("字符型数组的元素:");
printArray(charArray);
}
public static <T extends Comparable<T>> T maximum(T x, T y, T z)
{
T max = x;
if ( y.compareTo( max ) > 0 ){
max = y;
}
if ( z.compareTo( max ) > 0 ){
max = z;
}
return max;
}
@Test
public void testMximum(){
System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n",
3, 4, 5, maximum( 3, 4, 5 ) );
System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n",
6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear",
"apple", "orange", maximum( "pear", "apple", "orange" ) );
}
}