首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型-正确处理原始类型警告:

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

Stack Overflow用户
提问于 2017-12-26 22:14:12
回答 1查看 43关注 0票数 1

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

代码语言:javascript
复制
@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);
  ...

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

在这段代码中,删除原始类型警告而不向方法添加@SuppressWarning的最佳方法是什么?我所做的是最好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-26 22:38:19

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

示例:

Arrays类:

代码语言:javascript
复制
@SuppressWarnings("unchecked")
public static <T> T[] copyOf(T[] original, int newLength) {
    return (T[]) copyOf(original, newLength, original.getClass());
}

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

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47979800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档