SimpleyArray
public class SimpleArray<T> {
private Object[] object;
private int index = 0;
/** * 方法add()将值,在SimpleArray类的实例中定义到数组中。 * @param将添加到数组中的值。 */
public void add(T value) {
this.object[index++] = value;
}
/**
* Method get() created to get the value from the array passing the index.
* @param position in array, which value going to get.
* @return value from index was passed to the method.
*/
public T get(int position) {
return (T) this.object[position];
}
}
警告不一定是问题的指标:编译器无法证明会有问题,只是它认为可能存在问题。
假设您只将T
实例放入数组中 - 例如,您的add
方法如下所示:
public void add(T element) {
// No bounds checking etc, for clarity.
object[index++] = element;
}
然后你知道(T) object[someIndex]
实际上是安全的,因为你放入数组中的唯一东西是T
(或null
,可以强制转换为T
)的实例。
因此,在这里添加@SuppressWarnings("unchecked")
就可以了。当然,抑制警告是一种不好的做法,但是当类的不变量(编译器不知道)意味着它不是实际问题时,这很好。
在这里使用Object[]
的原因是您实际上无法创建不可复制类的数组。但是使用Object[]
并适当地投射非常简单;毕竟,这是编译器无论如何都会做的所有事情,如果你能够直接使用T[]
,因为类型擦除。