泛型基础(二)

ListGenericFoo

package org.wp.generic;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListGenericFoo<T extends List> {
	private T[] fooArray;

	public T[] getFooArray() {
		return fooArray;
	}

	public void setFooArray(T[] fooArray) {
		this.fooArray = fooArray;
	}

	public static void main(String args[]) {
		ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>();
		ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>();

		LinkedList[] linkedList1 = new LinkedList[10];
		ArrayList[] arrayList = new ArrayList[10];

		foo1.setFooArray(linkedList1);
		foo2.setFooArray(arrayList);
	}
}

 

GenericFoo

package org.wp.generic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

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<? extends List> foo = null;
		foo = new GenericFoo<LinkedList>();
		foo = new GenericFoo<ArrayList>();

		GenericFoo<? super List> foo1 = null;
		foo1 = new GenericFoo<Object>();
		foo1 = new GenericFoo<Collection>();

		GenericFoo<String> foo2 = new GenericFoo<String>();
		foo2.setFoo("hello world");
		// GenericFoo<?> 等价于 GenericFoo<? extends Object>
		GenericFoo<? extends Object> foo3 = foo2;

		System.out.println(foo3.getFoo());

		foo3.setFoo(null);
		System.out.println(foo3.getFoo());

		// 错误 foo3.setFoo("welcome");
	}
}

 

 

 

你可能感兴趣的:(java)