Возникли проблемы с вызовом этого странного метода (<T>) - PullRequest
2 голосов
/ 02 декабря 2011

При поиске в Интернете я нашел нужный мне метод, который может объединять массивы. Он был разработан так, чтобы принимать столько параметров, сколько необходимо, и любого типа данных. Это то, что мне нужно, но я не знаю, как правильно это назвать! Вот как выглядит метод:

public static <T> T[] arrayMerge(T[]... arrays)
{
    blah blah blah
}

Единственный способ, которым я мог бы назвать это, был byte[] result = arrayMerge(a, b, c); (где a, b и c все ссылаются на байты [] s), но это не работает. Как я могу это назвать? Спасибо!

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011

Я думаю, что универсальные типы могут работать только с классами, а не примитивными типами.Таким образом, они будут работать для Byte[], а не byte[].

0 голосов
/ 02 декабря 2011

Вы можете легко изменить метод, чтобы он не был универсальным и относился к byte[], если это то, что вы хотите. Например (не уверен, что это лучшее значение):

public static byte[] arrayMerge(byte[]... arrays) {
    int count = 0;
    for (byte[] array : arrays) 
        count += array.length;

    byte[] mergedArray = new byte[count];

    int start = 0;
    for (byte[] array : arrays) {
        System.arraycopy(array, 0, mergedArray, start, array.length);
        start += array.length;
    }
    return mergedArray;
}

Тогда используйте:

byte[] result = arrayMerge(new byte[0], new byte[0], new byte[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...