我想在 java 中创建一个通用数组,维护 Java 通常提供的类型安全性。
我正在使用这段代码:
class Stack<T> {
private T[] array = null;
public Stack(Class<T> tClass, int size) {
maximumSize = size;
// type unsafe
//array = (T[])new Object[maximumSize];
this.array = (T[])java.lang.reflect.Array.newInstance(tClass,maximumSize);
}
这种代码类型安全吗?如果是这样,为什么?如果它是类型安全的,为什么我需要强制转换?
The Array.newInstance(..)方法的返回类型为Object
。因此,您不能直接将其分配给除Object
。因此你需要一个演员阵容。
该方法委托给native
方法其中
创建具有指定组件类型和长度的新数组
因此它正在创建一个类型的数组T
.
类型安全,假设array
被声明为
T[] array;
,由以下保证Class<T>
参数和强制转换使用相同类型的变量。
您应该添加
@SuppressWarnings("unchecked")
在源代码中用注释解释上述原因。始终评论为什么您抑制其警告的演员是安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)