package c.cn.itcast.generic; |
import java.util.ArrayList; |
import java.util.Arrays; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import org.junit.Test; |
/** |
* 泛型 出现的原因: 集合处理 数据类型 任意 1: 数据安全 2: 模板 泛型写法 <对象类型> 结合集合一起使用 编译错误提前 运行错误 .class |
* 编译时错误 .java 编译生成.class <> 擦除 |
* |
* @author Administrator |
* |
*/ |
public class GenericDemo1 { |
// @Test |
public void test() { |
// 指定集合容器存储数据类型 |
List<Integer> list = new ArrayList<Integer>(); |
// 集合list 只能存放 整型数据 |
list.add( 1 ); |
list.add( 2 ); |
list.add( 3 ); |
// 集合遍历 获取 |
print(list); |
// double 类型 |
List<Double> list1 = new ArrayList<Double>(); |
// 集合list 只能存放 整型数据 |
list1.add( 1.2 ); |
list1.add( 233.3 ); |
list1.add( 3.3 ); |
print(list1); |
} |
// 为什么报错? 1: ? 通配符 通用性的泛型方法 目标 通用性方法 可以打印任意类型的集合 |
// 2: 自定义泛型方法 方法的返回类型前 添加<T> template E element Map <K,V> key value |
// 泛型方法 通用性 |
// <A> 方法返回值之前 |
public <T> void print(List<T> list) { |
System.out.println(list); |
} |
/** |
* 数组交换 int double String 通用性的方法 接受任意类型 |
*/ |
// @Test |
public void test2() { |
Integer[] arr = { 1 , 2 }; |
String arr1[] = { "a" , "b" }; |
change(arr); |
System.out.println(Arrays.toString(arr)); |
} |
private <T> void change(T[] arr) { |
T temp = arr[ 0 ]; |
arr[ 0 ] = arr[ 1 ]; |
arr[ 1 ] = temp; |
} |
@Test |
public void test3() { |
// 测试泛型类模板 |
Map<String, String> map = new HashMap<String, String>(); |
Generic<String> g = new Generic<String>( "hello" ); |
String s = g.getT(); |
System.out.println(s); |
} |
// public void print(List<?> list) { |
// for (int i = 0; i < list.size(); i++) { |
// Object a = list.get(i); |
// System.out.println(a); |
// } |
// } |
// public void print1(List<Integer> list) { |
// for (int i = 0; i < list.size(); i++) { |
// int a = list.get(i); |
// System.out.println(a); |
// } |
// } |
} |