import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class TestCollection
{
public static void main(String[] args)
{
genericTest();
}
//泛型理解
public static void genericTest(){
//创建的List对象如果不使用泛型,会提示警告
//使用SuppressWarnings注解不进行未使用泛型的警告的提示
@SuppressWarnings( {"rawtypes", "unchecked"})
List list=new ArrayList(Arrays.asList(new Apple(),new Orange()));
//在未使用泛型时List可以接受任意类型的对象,因此取出放入的对象就要小心,出现类型转换异常
System.out.println(list.size());//2
list.add(new Apple());
System.out.println(list.size());//3
System.out.print("非泛型List中对象的类型是:");
/*
* class com.xyd.Apple
* class com.xyd.Orange
* class com.xyd.Apple
* */
for(int i=0;i<list.size();i++){
System.out.print(list.get(i).getClass()+"\t");//可以发现List存入对象的实际类型,没有被转型为Object
System.out.println();
}
for(Object o:list){
// java.lang.ClassCastException
//Apple apple=(Apple)o;执行会报类型转换异常,就是因为我们不能确定存入List中的对象是哪些类型
if(o instanceof Apple){
Apple apple=(Apple)o;
System.out.println(apple);
}
if(o instanceof Orange){
Orange orange=(Orange)o;
System.out.println(orange);
}
}
//因此为了避免从list中取出对象发生类型转换异常,可以使用泛型,在编译期就进行类型检查,而不用等到运行时才发现类型问题。
List<Apple> eList=new ArrayList<Apple>(Arrays.asList(new Apple(),new Apple()));
//下面的语句无法通过编译,编译期会检查泛型集合存入对象是否正确
//eList.add(new Orange());
eList.add(new Apple());
//Java集合类库提供了addAll方法对集合类型的引用进行赋值
Collections.addAll(eList, new Apple());
System.out.println(eList.size());
}
public static void useCollection(){
}
public static void useMap(){
}
}
class Fruit{
}
class Apple extends Fruit{
private final String type="This is an apple";
@Override
public String toString()
{
return type;
}
}
class Orange extends Fruit{
private final String type="This is an orange";
@Override
public String toString()
{
return type;
}
}
ThinkInJava集合学习
最新推荐文章于 2020-11-20 09:00:00 发布