在java 泛型指南中,有一段关于 转型和instanceof的描述
并且有这样一段代码:
<T> T badCast(T t, Object o) {
return (T) o; // unchecked warning
}
指南中说的很清楚
类型参数在运行时并不存在。这意味着它们不会添加任何的时间或者空间上的负担,这很好。不幸的是,这也意味着你不能依靠他们进行类型转换。但,我在jdk1.6的源码ArrayList.java中看到
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
其中第一个return语句明显违反了约定,请知道的朋友给指点一下。
并且有这样一段代码:
<T> T badCast(T t, Object o) {
return (T) o; // unchecked warning
}
指南中说的很清楚
类型参数在运行时并不存在。这意味着它们不会添加任何的时间或者空间上的负担,这很好。不幸的是,这也意味着你不能依靠他们进行类型转换。但,我在jdk1.6的源码ArrayList.java中看到
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
其中第一个return语句明显违反了约定,请知道的朋友给指点一下。
copyOf(T[] original, int newLength)
复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。
static <T,U> T[]
copyOf(U[] original, int newLength, Class<? extends T[]> newType)
复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。