Почему я не могу явно передать аргумент типа универсальному методу 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
Почему я не могу явно передать аргумент типа универсальному методу Java?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.