你不知道的java_泛型的边界

2014-11-24 03:26:39 · 作者: · 浏览: 0

java泛型的边界:在运行时,泛型被擦除,类型为原始类型。

1. 中类型的丢失

import java.util.ArrayList;

public class TypeTest {
	
	public static void main(String[] args) {
		//泛型中的类型String,Integer在
		Class
   c1 = new ArrayList
  
   ().getClass();
		Class
    c2 = new ArrayList
   
    ().getClass(); System.out.println(c1 == c2); //true } }
   
  
//output
true

2. 复杂点的例子:应用泛型后仍需使用强制类型转换

import java.lang.reflect.Array;
import java.util.Arrays;

@SuppressWarnings("hiding")
public class ArrayMaker
  
    {
	
	private Class
   
     kind; public ArrayMaker(Class
    
      kind) { this.kind = kind; } @SuppressWarnings("unchecked") T[] create(int size) { //此处Array.newInstance()方法返回的是Object,必须转型;说明期望的泛型没有起任何作用 return (T[]) Array.newInstance(kind, size); } @SuppressWarnings("unchecked") T[] create(T t, int size) throws InstantiationException, IllegalAccessException { //此处Array.newInstance()方法返回的是Object,必须转型;说明期望的泛型没有起任何作用 T[] ts = (T[]) Array.newInstance(kind, size); //注意:此处仍能保证放入T[]的类型为T for(int i=0; i
     
StrsMaker = new ArrayMaker (String.class); String[] strsArray = StrsMaker.create(10); String[] strsArray2 = StrsMaker.create("AA", 10); System.out.println(Arrays.toString(strsArray)); System.out.println(Arrays.toString(strsArray2)); } }
//output
[null, null, null, null, null, null, null, null, null, null]
[AA, AA, AA, AA, AA, AA, AA, AA, AA, AA]