Для удобства чтения между статическим и общим именем параметра обычно есть пробел. static
объявляет метод как статический, т. Е. Не требуется экземпляр для его вызова. <E>
объявляет, что существует неограниченный универсальный параметр E, который используется для параметризации аргументов метода и / или возвращаемого значения. Здесь он используется как в типе возврата, Set<E>
для объявления метода, возвращающего набор E, так и в параметре Collection<E>
, указывающем, что метод принимает коллекцию E.
Тип E не указан, только то, что возвращаемое значение и параметр метода должны быть обобщенно параметризованы с одним и тем же типом. Компилятор определяет фактический тип при вызове метода. Например,
Collection<String> myStrings = new ArrayList<String>();
.. add strings
Set<String> uniqueStrings = SomeClass.removeDups(myStrings);
Если вы попытаетесь использовать разные параметризованные типы для двух коллекций, например
Set<Integer> uniqueStrings = SomeClass.removeDups(myStrings);
это приведет к ошибке компилятора, поскольку общие параметры не совпадают.