gpt4 book ai didi

java - 为什么 IDEA 警告我在这一行 (T) this.object[position] 中未经检查的强制转换为泛型类型?但永远是工作

转载 作者:行者123 更新时间:2023-12-02 02:50:14 25 4
gpt4 key购买 nike

简单数组

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[],由于类型删除,这就是编译器无论如何都会做的事情。

关于java - 为什么 IDEA 警告我在这一行 (T) this.object[position] 中未经检查的强制转换为泛型类型?但永远是工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com