为什么 IDEA 警告我关于 unchekd 强制转换为此行 (T) this.object[position] 中的泛



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[],因为类型擦除。

相关内容