簡體   English   中英

泛型-原始類型警告的正確處理:

[英]Generics - Correct treatment for raw type warnings:

在實現通用方法時,我使用以下語句:

@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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM