2017-02-14 44 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)。