2017-02-14 3 views
0

Теперь я смущен get методами в Key класса. Вопрос только в том, какой метод get используется в нижеследующем коде. Но, я не могу найти подходящий метод. Конечно, я уже проверил ссылку API, но я не смог найти вероятный метод.
Смотрите этот код.метод get() в Key in Guice

public static void main(String[] args) throws Exception { 
    Injector injector = Guice.createInjector(
     new DatabaseModule(), 
     new WebserverModule(), 
     ... 
    ); 

    Service databaseConnectionPool = injector.getInstance(
     Key.get(Service.class, DatabaseService.class)); 
    databaseConnectionPool.start(); 
    addShutdownHook(databaseConnectionPool); 

    Service webserver = injector.getInstance(
     Key.get(Service.class, WebserverService.class)); 
    webserver.start(); 
    addShutdownHook(webserver); 
    } 

Второй аргумент, кажется, T extends V, где первый аргумент V. Хотя это только мое предположение, поэтому какой метод в классе Key используется в этом коде?

+1

Что мешает вам открывать код в любой современной среде IDE и использовать «перейти к методу»? – user3707125

ответ

2

Всех перегрузки Key.get отличается своим типа в качестве первого аргумента и класс аннотаций или экземпляр в качестве необязательного второго аргумента. See the docs.

Key.get(Class<T> type) 
Key.get(Class<T> type, Annotation annotation) 
Key.get(Class<T> type, Class<? extends Annotation> annotationType) // THIS ONE 
Key.get(Type type) 
Key.get(Type type, Annotation annotation)) 
Key.get(Type type, Class<? extends Annotation> annotationType)) 
Key.get(TypeLiteral<T> typeLiteral) 
Key.get(TypeLiteral<T> typeLiteral, Annotation annotation)) 
Key.get(TypeLiteral<T> typeLiteral, Class<? extends Annotation> annotationType)) 

Поскольку вызовы есть второй аргумент, который является классом, они должны быть третьей перегрузкой выше (помечено «Это один»), которые принимают два класса: один из типа и одного класса аннотаций ,

// Matches injections of "@DatabaseService Service" 
Key.get(Service.class, DatabaseService.class) 

// Matches injections of "@WebserverService Service" 
Key.get(Service.class, WebserverService.class) 
0

Связь между первым и вторым параметрами отсутствует, вторым параметром может быть любая аннотация. Вы должны привязать класс Service к различным реализациям с помощью различных аннотаций (DatabaseService и WebserverService в этом случае).