2013-03-30 3 views
2

Я пытаюсь понять этот метод подписи:Понимание сигнатура метода

public final <T> FluentIterable<T> transform(Function<? super E,T> function) 

(взятый из http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/FluentIterable.html#transform%28com.google.common.base.Function%29)

Я понимаю, что преобразование возвращает FluentIterable<T>, но я не понимаю, что <T> перед FluentIterable<T> означает?

Кроме того, в Function<? super E,T>, я понимаю, что такое ? super E средства, но я не могу себе представить, как компилятор может проверить это - не E неизвестно во время компиляции, так как компилятор должен знать, если ? является супертипом E?

ответ

5

<T> означает, что это метод с параметром типового типа T. Это похоже на <T> после имени класса (например, List<T>), только для методов.

E не известно при компиляции. E также общий параметр типа, определенный в определении класса:

public abstract class FluentIterable<E> extends Object implements Iterable<E> 

При создании экземпляра этого класса компилятор знает тип E.

+0

Большое спасибо, теперь я понимаю вещь 'E'. О первом '', на самом деле он не используется в методе преобразования, но в классе функций, но также можно получить доступ к' ' в методе преобразования, правильно? –

+1

Да, вы могли бы использовать тип 'T' в методе так же, как вы могли бы использовать' E'. Если класс не будет определять 'E', то для подписи метода потребуется' 'вместо' '. – micha

+0

Ну, спасибо и, конечно, принято как ответ ;-) –

Смежные вопросы