java不支持创建泛型数组(1)

1.new T[0]无法通过编译
2.泛型容器无法转化为泛型数组

下面是对第二点的测试:

GenericBlaBla.java

package com.kingdee.bos.blood;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class GenericBlaBla {
	//以list的形式返回map中的value
	public static  <T> List getList(Map<String,T> map){
		List list = new ArrayList<T>();
		list.addAll(map.values());
		return list;
	}
	//以array的形式返回map中的value
	public static  <T> T[] getArray(Map<String,T> map){//
		List list = getList(map);
		return (T[])list.toArray();
	}

}

class A{
	String a;

	A(String a) {
		this.a = a;
	}

	public String toString() {
		return a;
	}
	
	
}



GenericArrayTest.java

package com.kingdee.bos.blood;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

public class GenericArrayTest extends TestCase {
	private static Map<String,A> map = new HashMap<String, A>();

	protected void setUp() throws Exception {
		super.setUp();
		map.put("blood", new A("a handsome boy"));
	}

	public void testGetList() {
		try{
			List<A> list = (List<A>) GenericBlaBla.getList(map);
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
			System.out.println("java可以创建泛型List");

		}catch(Throwable t){
			System.out.println(t);
			t.printStackTrace();
			fail("java不可以创建泛型List");
		}
	}

	public void testGetArray() {
		try{
			A[] array = (A[]) GenericBlaBla.getArray(map);
			for (int i = 0; i < array.length; i++) {
				System.out.println(array[i]);
			}
			fail("java可以创建泛型Array");
		}catch(Throwable t){
			System.out.println(t);
			//t.printStackTrace();
			System.out.println("java不可以创建泛型Array");
		}
	}

}



测试用例运行效果如下:

java不支持创建泛型数组(1)_第1张图片

你可能感兴趣的:(java,JUnit)