E
может означать что угодно.Чтобы использовать E
(как универсальный), вам нужно создать экземпляр объекта.Вы не можете сделать это, если у вас есть статический метод, потому что общие параметры типа находятся в области видимости только для экземпляра класса (который включает в себя его методы экземпляра и поля экземпляра).
Статические члены и поля принадлежат каждомуэкземпляр класса.Итак, если у вас есть экземпляр BTNode<String>
и другой экземпляр BTNode<Integer>
, что именно должен использовать статический treeCopy
?String
или Integer
?
Есть обходной путь;Вы должны сказать статическому методу, что означает E
.Поэтому вам придется определить его следующим образом:
public static <E> BTNode<E> treeCopy(BTNode<E> source)
Это также поможет еще раз взглянуть на ваш дизайн и посмотреть, действительно ли это то, что вы хотите.