java不支持泛型数字

先记录一下,留着遇到问题,能有个思路!

Arrays of generics are not type-safe, because arrays (unlike generic collections) are covariant: you can use a String[] when an Object[] is required, but not so with List<String> and List<Object>.

Covariant collections are not type-safe unless they are read-only.


In a little more detail:
The Java designers decided to disallow arrays of generics because 1) it would not be type-safe, and 2) generics were added to the language precisely to ensure type-safety.

Arrays are also not type-safe:

String[] strings;
Object[] objects = strings; // allowed because of covariance
objects[0] = Long.valueOf(9); // fails at runtime with ArrayStoreException



Because generic types don't carry the type parameter at runtime (that info is "erased"), the JVM cannot even throw an ArrayStoreException in this example

List<String>[] stringsArray = ... // can't create
Object[] objects = stringsArray; // allowed because of covariance of arrays
List<Long> longs = Arrays.asList(Long.valueOf(7));
objects[0] = longs; // ArrayStoreException cannot be thrown because JVM doesn't know the type parameter Long, it's been erased
int length = stringsArray[0].get(0).length(); // would throw ClassCastException---type safety compromised

你可能感兴趣的:(java不支持泛型数字)