第十一:泛型(上)

一:

将原本确定不变的数据类型参数化

二:

作为对原有Java类型体系的扩充,使用泛型可以提高Java应用程序的类型安全、可维护性和可靠性

三:

创建集合容器时规定其允许保存的元素类型,然后由编译器负责添加元素的类型合法性检查,

再去用集合元素时则不必再进行造型处理(cast强制类型转换)

public class GenericFoo<T> {// 泛型类
	private T foo;

	public T getFoo() {
		return foo;
	}

	public void setFoo(T foo) {
		this.foo = foo;
	}

	public static void main(String[] args) {
		GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();// 在声明的时候指定类型
		GenericFoo<Integer> foo2 = new GenericFoo<Integer>();

		// foo1=foo2;//类型不一样,赋值出错

		foo1.setFoo(new Boolean(true));
		Boolean b = foo1.getFoo();
		System.out.println(b);

		foo2.setFoo(new Integer(10));
		Integer num = foo2.getFoo();
		System.out.println(num);

		// GenericFoo foo3 = new GenericFoo();//相当于下面的代码
		GenericFoo<Object> foo3 = new GenericFoo<Object>();
		foo3.setFoo("helloworld");
		Integer in = (Integer) foo3.getFoo();// 编译时不出错
		System.out.println(in);// 运行时会出错

		Date d1 = new Date();
		Date d2 = new Date();

		d1 = d2;

		List<String> list = new ArrayList<String>();
		list.add("hello");
		list.add("world");
		list.add("helloworld");
		// list.add(1);//添加的类型不是指定的String类型会报错
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}

		// for-each循环
		for (String string : list) {
			System.out.println(string);
		}

		// 迭代循环
		for (Iterator<String> it = list.iterator(); it.hasNext();) {
			System.out.println(it.next());
		}
	}
}


你可能感兴趣的:(泛型)