Ответ 1
Этот вопрос подходит для одной из моих старых заметок. Надеюсь, эта иллюстрация поможет:
Интересно, почему общие методы, которые возвращают ничего void
, объявляются (или могут быть) следующим образом:
public static <E> void printArray( E[] inputArray ) {
// Display array elements
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
Кажется, что <E>
- тип возвращаемого объекта, но метод фактически ничего не возвращает. Итак, каков реальный смысл <E>
в этом случае конкретно и в общих методах вообще?
Этот вопрос подходит для одной из моих старых заметок. Надеюсь, эта иллюстрация поможет:
<E>
- это объявление типа типового типа. Это означает, что "этот метод имеет параметр одного типа, называемый E
, который может быть любым типом".
Это не тип возвращаемого значения, который появляется после объявления параметра типа, непосредственно перед именем метода. Таким образом, возвращаемый тип метода printArray
в вашем вопросе остается void
.
Подробнее о описаниях методов см. раздел 8.4 JLS.
Это не тип возвращаемого объекта. Он указывает, что E
в сигнатуре метода является общим типом, а не конкретным типом. Без него компилятор будет искать класс с именем E
для аргумента метода.
E > называется формальным параметром типа. Это не тип возвращаемого метода. В основном он говорит, что метод может принимать в качестве параметров массивы разных типов (E [] inputArray).
E используется в качестве заполнителя для фактического типа, который будет передан функции Gen при вызове этой функции.
предположим, что E можно заменить на integer