package com.collection.genericity;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
/*
* 泛型是JDK1.5开始使用的新特性;
*/
public class Demo1 {
/*
* 泛型:
* 需求:把一个集合中的全部元素转成大写;
*/
@Test
public void test1(){
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("china");
// 因为默认情况下,list集合可以添加任意类型的数据,所以当集合中添加了整形的数据时,就出现了异常:
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
list.add(123);
// 将集合中的所有元素全部转为大写
for (int i = 0; i < list.size(); i++){
// 因为默认情况下,集合中可以添加任意类型的数据,所以需要先将集合中的所有元素强制转换成字符串;
// 如果集合中加入了整数数据,此处会报错,因为整形数据不可以强制转换成字符串类型;
String str = (String) list.get(i);
System.out.println("大写:" + str.toUpperCase());
}
}
/*
* 泛型的好处:
* 1、将运行时的异常提前至编译时;
* 2、避免了无谓的强制类型转换;
*/
@Test
public void test2(){
// 泛型写法 <String>:表示该集合中只能存储字符串类型的数据;
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("world");
list.add("china");
// 因为已经指定了集合的存储类型只能是字符串类型,所以此处编译时就会报错;
// list.add(123);
for (int i = 0; i < list.size(); i++){
// 因为容器中存储的都是字符串类型的数据,所以取出的也是字符串,就不需要强制类型转换了;
String str = list.get(i);
System.out.println("大写:" + str.toUpperCase());
}
}
/*
泛型在集合中的常见应用:
List<String> list = new ArrayList<String>(); true
List<Object> list = new ArrayList<String>(); false
List<String> list = new ArrayList<Object>(); false
// 以下两种写法主要是为了让JDK1.5以后的写法兼容1.4以前的写法;
List<String> list = new ArrayList(); true
List list = new ArrayList<String>(); true
注意:泛型没有多态的概念,左右两边的数据类型必须要一致,或者只写一边的泛型;
推荐使用:两边都写泛型;
*/
@Test
public void test3(){
List<String> list1 = new ArrayList<String>();
// List<Object> list2 = new ArrayList<String>();
// List<String> list3 = new ArrayList<Object>();
List<String> list4 = new ArrayList();
List list5 = new ArrayList<String>();
}
}
Java学习笔记之泛型(一):集合中的泛型
最新推荐文章于 2022-08-14 09:24:35 发布