2016-04-09 5 views
0

Тип вывода не работает для массивов с помощью общих методов? Я получаю ошибку «Метод содержит (T [], T) неприменим для аргументов (int [], int)». Как я должен это делать?Вывод типа Java для массива paramater общего метода

method(new int[1], 0); //Error 

... 

public static <T> void method(T[] array, T value) { 
    //Implement 
} 
+2

Дженерики не работает с примитивными типами, это только для объектов. Попробуйте с помощью 'new Integer [1], 0' вместо этого. –

+0

Это также причина, по которой в Java создаются 'Double',' Integer', 'Boolean', .... –

+0

Что вы имеете в виду, когда вы говорите, что примитивы не работают с универсальными типами? int работает просто отлично, это просто массив, вызывающий проблемы – Dimpl

ответ

1

Дженерики не работает с примитивными типами, только с типами объектов.

Вы можете делать то, что выглядит как использование генериков с примитивными типами, из-за авто-бокс:

<T> void methodOne(T value) {} 

methodOne(1); // Compiles OK, T = Integer. 

Что на самом деле происходит вот что int буквальным 1 в настоящее время «боксовый» в Integer.valueOf(1), который объект типа Integer.

Вы можете передать также int[] в общий метод, потому что int[] - это тип объекта. Итак:

methodOne(new int[1]); // Compiles OK, T = int[]. 

Однако, вы не можете смешивать эти два с одной и той же переменной типа: int[] и Integer не связанные типы, так что нет ни одного типа переменной T, которая удовлетворяет обоим параметрам. Нет эквивалентного оператора автоматического бокса от int[] до Integer[].

Таким образом, вы должны пройти Integer[] массив в качестве первого параметра:

method(new Integer[1], 0); 
1

Вы можете использовать Integer вместо int, поскольку generics не работают с примитивными типами.

0

поэтому использование primitive type здесь. Дженерики работают только с referenced.

method(new int[1], 0); //Error 

лучше пойти с

method(new Integer[]{1,2,3,4}, 0); //works fine 

 Смежные вопросы

  • Нет связанных вопросов^_^