泛型 - 正确处理原始类型警告:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型 - 正确处理原始类型警告:相关的知识,希望对你有一定的参考价值。

在实现泛型方法时,我使用了以下语句:

@SuppressWarning({"unchecked"})
private static <T extends Comparable<T>> T[] merge(T[] arrayA, T[] arrayB) {
  ...
  T[] result;

// This is the line that needs that gives warnings    
  result = (T[]) Array.newInstance(arrayA.getClass().getComponentType(), arrayA.length + arrayB.length);
  ...

现在,许多编程源都声明,避免将@SuppressWarnings用于未经检查的原始类型是一种很好的编程习惯。但是,在这种情况下,我不知道如何在代码中解决此警告。在网上搜索最佳实践以在Java中实例化泛型类型并没有给出一个明确的方法。事实上,我发现的许多解决方案都不太理想。

在这段代码中,如果不将@SuppressWarnings添加到方法中,删除原始类型警告的最佳方法是什么?我做的最好的方法是什么?

答案

在某些情况下,你无法避免@SuppressWarnings。甚至标准的JDK类在处理泛型数组时也使用@SuppressWarnings("unchecked")

例:

Arrays类:

@SuppressWarnings("unchecked")
public static <T> T[] copyOf(T[] original, int newLength) {
    return (T[]) copyOf(original, newLength, original.getClass());
}

说到Arrays.copyOf,您可以使用该方法结合System.arraycopy而不是您当前的逻辑:

private static <T extends Comparable<T>> T[] merge(T[] arrayA, T[] arrayB) {
    T[] result = Arrays.copyOf (arrayA, arrayA.length+arrayB.length);
    System.arraycopy (arrayB, 0, result, arrayA.length, arrayB.length);
    return result;
}

以上是关于泛型 - 正确处理原始类型警告:的主要内容,如果未能解决你的问题,请参考以下文章

如何使用泛型避免类型安全警告[重复]

某些 Java 泛型类型转换中的类型安全警告是啥意思?

在 GetMethod 中处理泛型类型

泛型使用

学习笔记——泛型

为啥我会在这里收到类型安全警告? (泛型)