泛型

在集合中为甚麽建议使用泛型.之前在Java SE5之前的容器的一个主要问题时编译器允许你向容器中插入不正确的类型

package com.tmx.On_4_March;

import java.util.ArrayList;

class Apple {
	private static long counter;
	private final long id = counter++;

	public long id() {
		return id;
	}
}

class Orange {

}

public class Exp11_1 {
	public static void main(String[] args) {
		fun1();
		fun3();
	}
	/**
	 * 不加泛型,ArrayList保存的是object,所以你可以添加Apple和Orange对象
	 * 但当从ArrayList中获取对象时,得到的只是Object的引用,而不是具体某类对象
	 * 所以必须的强制转型
	 */
	public static void fun1() {
		ArrayList apples=new ArrayList();
		for (int i = 0; i < 3; i++) {
			apples.add(new Apple());
		}
		apples.add(new Orange());
		for(int i=0;i apples=new ArrayList();
		for (int i = 0; i < 3; i++) {
			apples.add(new Apple());
		}
		//apples.add(new Orange());  编译期错误
		for (Apple apple : apples) {
			apple.id();
		}
		for (int i=0;i list=new ArrayList();
		list.add(new Apple());
		list.add(new FruitA());
		list.add(new FruitB());
		list.add(new FruitC());
		for (Apple apple : list) {
			System.out.println(apple);
		}
	}
}

class FruitA extends Apple{}
class FruitB extends Apple{}
class FruitC extends FruitB{}
	

上述代码的执行结果

Apple对象数量:0
Apple对象数量:1
Apple对象数量:2
com.tmx.On_4_March.Apple@70dea4e
com.tmx.On_4_March.FruitA@5c647e05
com.tmx.On_4_March.FruitB@33909752
com.tmx.On_4_March.FruitC@55f96302

fun3是通过Object的toString()方法产生的,该方法打印类名,后面跟随该对象的散列码的无符号16进制表示(这个散列码是通过hashCode()方法产生的)

你可能感兴趣的:(java,Java,集合,List,ArrayList,泛型)