Вы используете <E>
, чтобы типизировать метод, который вы определяете.
Наиболее распространенный пример обобщенных типов - это иметь типизированный класс, подобный этому:
public class SomeClass<E> {
...
}
Тогда, когдавы создаете новый объект этого класса, определяя тип непосредственно следующим образом:
new SomeClass<String>();
Таким образом, любой метод в этом классе, который ссылается, будет обрабатываться как строка для этого экземпляра.
Теперь рассмотрим статический метод (который не привязан к какому-либо конкретному экземпляру класса), чтобы типизировать этот метод, вы используете другой тип типизации, который применяется к методам, например:
static <E> List<E> nCopies(int n, E value)
Вы используете <E>
перед возвращаемым типом, чтобы сказать «этот конкретный метод будет учитывать некоторое E при выполнении».Что будет <E>
будет решено, когда вы вызовете метод:
nCopies(3, "a");
В этом примере <E>
будет String, поэтому тип возвращаемого значения будет List<String>
.
Наконец, вы можете даже смешать их обоих:
public class SomeClass<E> {
public <F> void doSomething(E e, F f){
...
}
}
В этом случае, если у вас есть экземпляр SomeClass, E в методе doSomething всегда будет String (для этого экземпляра), но Fможет быть чем угодно.