Почему я не могу явно передать аргумент типа универсальному методу Java?

Можно, если передать тип j2se в качестве параметра метода.

static  List createEmptyList( Class type ) {
  return new ArrayList();
}

@Test
public void createStringList() {
  List stringList = createEmptyList( String.class );
}

Методы jre не могут быть универсализированы generics так же, как тип, поэтому jre единственный вариант для javax метода с динамически типизированным j2se универсальным типом возвращаемого oraclejdk значения — уф, это глоток java-generics :-) — передать тип в качестве .java аргумента.

За отличный FAQ generic-programming по дженерикам Java see Angelika Langer's generics FAQ.

.
.

Последующие действия:

В openjdk этом контексте не имеет смысла openjdk использовать аргумент массива, как scala-generics в Collection.toArray( T[] ). Единственная причина, по java-generics которой используется массив, заключается generics в том, что тот же (предварительно generic выделенный) массив используется openjdk для хранения результатов jre (если массив достаточно велик, чтобы oraclejdk поместить их все). Это позволяет .java экономить на постоянном выделении generic-programming нового массива во время выполнения.

Однако jdk в целях обучения, если вы jdk хотите использовать типизацию generics массива, синтаксис очень java-generics похож:

static  List createEmptyList( T[] array ) {
  return new ArrayList();
}

@Test
public void testThing() {
  List integerList = createEmptyList( new Integer[ 1 ] );
}

java

generics

syntax

2022-09-16T09:17:03+00:00
Вопросы с похожей тематикой, как у вопроса:

Почему я не могу явно передать аргумент типа универсальному методу Java?