簡體   English   中英

有關基本數組的Java泛型方法代碼重復問題

[英]Java Generics method code duplication issue regarding primitive arrays

因此,我正在為一個小型個人實用程序庫實現Grid類的實現。 經過大量的工作,我整理了Grid類並添加了一些功能。 我希望與Grid類一起使用的關鍵功能之一是能夠將任意給定類型的單個2D數組作為構造函數的參數。

在我意識到我無法編譯任何試圖將任何原語數組傳遞給構造函數的代碼之前,這一直很好。 由於自動裝箱不會在原始數組上發生,因此這以代碼重用的形式向我提出了一個設計問題。 不管傳入的數組類型如何,初始化Grid的方法都是相同的,即使它們是基元也是如此,但是看來我需要為所有不同類型的基元編寫一個單獨的構造函數。 假設我只使用基本構造函數,這給我留下了9個不同的構造函數(並且我曾計划讓構造函數使用諸如網格包裝選項之類的不同參數)。

我以為沒有辦法避免所有這些代碼重復是對的嗎?

您可以使用Array類避免(大部分)重復。 但這不是很漂亮:您的構造函數參數的類型一定是Object ,並且您只需要信任調用方將實際的數組傳遞到那里,而不是SocketProperties

例如,您可以這樣進行自己的拳擊:

<T> public T[][] boxArray(Class<T> clazz, Object array) {
    int height = Array.getLength(array);
    int width = height == 0 ? 0 : Array.getLength(Array.get(array, 0));
    T[][] result = (T[][]) Array.newInstance(clazz, height, width);
    for(int i = 0; i < height; i ++) {
        Object a = Array.get(array, i);
        for(int j = 0; j < width; j++) {
            result[i][j] = (T) Array.get(a, j); 
        }
    }
    return result;
}

暫無
暫無

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

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