![](/img/trans.png)
[英]Java Generics: how handle raw type member variable and avoid warnings?
[英]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.