import java.util.ArrayList;
public class Demo2 {
/*
* 什么是泛型?
* 1、泛型是一种模板,例如 ArrayList<T>,T 可以是任意类型
* ArrayList<String> names = new ArrayList<String>();
* 然后由编译器针对类型做检查。
*
* 2、向上转型
* 注意泛型的继承关系:可以把ArrayList<Integer>向上转型为List<Integer>(T不能变!),但不能把ArrayList<Integer>向上转型为ArrayList<Number>(T不能变成父类)。
* Number 是 float 的父类,如果转成number,那么就可以添加 浮点数,编译不会报错,但是获取值的时候就会报错。因为里面存在了 整形 和浮点型
* */
/*
* 声明一个泛型列表,数组内可以存放任意类型的对象,因为 Object 是所有类的根类。
* 但是注意:从ArrayList中检索元素是,此时得到的是 Object 类型,要进行类型转换。
* */
public static void main(String[] args) {
ArrayList<Object> names = new ArrayList<>();
Person p = new Person("chen",32);
names.add("str");
names.add(123);
names.add(p);
Object a = names.get(0);
Object b = names.get(1);
Object c = names.get(2);
System.out.println(a); // str
System.out.println(b); // 123
System.out.println(c); // com.fanxing.Person@1b6d3586,可以再利用反射获取到 Person 实例对象的 name,或者由Object转成实际类型
// 从 ArrayList 中获取元素并进行类型转换。
for(Object obj:names){
if(obj instanceof String){
String str = (String) obj;
System.out.println("String: "+str);
} else if (obj instanceof Integer) {
Integer inte = (Integer) obj;
System.out.println("Integer: "+inte);
} else if (obj instanceof Person) {
Person pp = (Person) obj;
System.out.println(pp.getName());
}
}
}
}
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public Person(){
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}