《Java 编程思想》中的一个例子,为何运行不了?
这是《Java 编程思想》中的一个例子,曲线创建Java范型数组的。下面代码main()方法内的是我加的。作者说是可以的,但为何我运行不了,怎样改能让它运行?
//: arrays/ArrayOfGenericType.java
// Arrays of generic types won't compile.
import java.util.*;
public class ArrayOfGenericType<T> {
   T[] array; // OK
   @SuppressWarnings("unchecked")
   public ArrayOfGenericType(int size) {
     //! array = new T[size]; // Illegal
     array = (T[])new Object[size]; // "unchecked" Warning
   }
   // Illegal:
   //! public <U> U[] makeArray() { return new U[10]; }
	public static void main(String[] args) {
		ArrayOfGenericType<String> ia = new ArrayOfGenericType<String>(11);
		ia.array[0] = "World";  // line 16		ia.array[1] = "Hello";
		System.out.println(Arrays.toString(ia.array));
	}
} ///:~
编译、运行结果如下:
C:\> javac ArrayOfGenericType.java
C:\> java ArrayOfGenericType
Exception in thread "main" 
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
         at ArrayOfGenericType.main(ArrayOfGenericType.java:16)
------解决方案--------------------
这是个解释错误的例子。此例本身就有错误。楼主看书有点断章取义了。
作者想表达的是这种方法在这里行不通,
ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
正确的写法在在书中是有的:
import java.lang.reflect.Array;
public class ArrayOfGenericType<T>{
	T[] array;  
	@SuppressWarnings("unchecked")
	public ArrayOfGenericType(Class<T> type, int size){
              //运用反射类Array
		array = (T[])Array.newInstance(type, size);
	}
	public void put(int index, T item){
		array[index] = item;
	}
	public T get(int index){
		return array[index];
	}
	public T[] rep(){
		return array;
	}
	public static void main(String[] args)
	{
		ArrayOfGenericType<String>  aogt = new ArrayOfGenericType<String>(String.class, 5);
		String[] buffer = aogt.rep();		
		buffer[0] = "Hello";
		buffer[1] = "World";
		System.out.println(buffer[0]);
		System.out.println(buffer[1]);
	}}