Java 实例化泛型类型时出现警告
我有一个用于实例化泛型类型的代码片段,如下所示:Java 实例化泛型类型时出现警告,java,generics,Java,Generics,我有一个用于实例化泛型类型的代码片段,如下所示: public class GenericMessageMapper<I ,X> { public X xFromI(I imf) { // do thing by imf argument Class<X> clazz = (Class<X>)((ParameterizedType) this.getCla
public class GenericMessageMapper<I ,X>
{
public X xFromI(I imf)
{
// do thing by imf argument
Class<X> clazz = (Class<X>)((ParameterizedType)
this.getClass()
.getGenericSuperclass())
.getActualTypeArguments()[1];
X x = clazz.newInstance();
}
}
出现此警告的原因是什么?解决方案是什么?这只意味着类的类型只有在运行时才知道,因此可能会出现这样的情况:您认为应该得到类型为X的类,但实际上它是其他类型的类(由于X可以是任何类型,所以在编译时它不知道)
基本上,您可以忽略此警告。这只意味着类的类型只有在运行时才知道,因此可能会出现这样的情况:您认为应该得到类型为X的类,但实际上它是其他类型的类(因为X可以是任何类型,所以在编译时它不知道)
基本上你可以忽略这个警告。警告就是这样。警告。有时警告无关紧要,有时则不然。它们用于提醒您注意编译器认为可能有问题但可能没有的东西 在cast的情况下,它总是会在这种情况下发出警告。如果你绝对确信一个特定的演员是安全的,那么你应该考虑在这行之前添加一个这样的注释:
@SuppressWarnings (value="unchecked")
参见警告就是这样。警告。有时警告无关紧要,有时则不然。它们用于提醒您注意编译器认为可能有问题但可能没有的东西 在cast的情况下,它总是会在这种情况下发出警告。如果你绝对确信一个特定的演员是安全的,那么你应该考虑在这行之前添加一个这样的注释:
@SuppressWarnings (value="unchecked")
reference是正确的-在通常情况下,如果出现此警告,您应该在强制转换之前执行实例检查(instanceof
)。但在您的例子中,这是不可能的,因为Java中的泛型是通过擦除实现的<代码>类不是具体化类型,因此无法将其用于实例检查,关闭警告的唯一方法是使用@SuppressWarnings(value=“unchecked”)
。
若要了解有关泛型的更多信息,可以使用本书。是正确的-在通常情况下,在出现此警告的情况下,应在强制转换之前执行实例检查(instanceof
)。但在您的例子中,这是不可能的,因为Java中的泛型是通过擦除实现的<代码>类不是具体化类型,因此无法将其用于实例检查,关闭警告的唯一方法是使用@SuppressWarnings(value=“unchecked”)
。
要了解有关泛型的更多信息,可以使用本书