2011-05-26 51 views
4

我有一堆實體類型的工廠,從一個通用的通用接口派生。例如,如何使用通用接口配置Google-Guice?

public class ConnectionFactory implements IEntityFactory<Connection> { ... } 

我想使用Google-Guice來打破這些工廠的硬相關性。

然而,有一個語法錯誤,當我嘗試配置吉斯:

public class EntityFactoryModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     bind(IEntityFactory<Connection>.class).to(ConnectionFactory.class); 
    } 
} 

Eclipse中說,「IEntityFactory不能被解析爲一個變量。」

有人可以幫我理解爲什麼這不起作用嗎?另外,是否有可用的替代語法?

回答

8

我吉斯福通常有限,但我想你想有一個類型的文字在這裏:

bind(new TypeLiteral<IEntityFactory<Connection>>() {}) 
    .to(ConnectionFactory.class); 
+0

不錯,Guice-fu!不幸的是,這會產生一個錯誤:「令牌上的語法錯誤,錯誤的結構(s)」。 – retrodrone 2011-05-26 16:56:52

+1

@retrodrone:我錯過了構造函數調用中的括號。嘗試編輯後的版本,並參閱http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Binder.html瞭解更多詳情。 – 2011-05-26 16:58:53

+0

我應該知道不要打折你@JonSkeet那麼多徽章。它似乎工作,很多thx的鏈接! – retrodrone 2011-05-26 17:01:50

0

一種方法是定義一個新的接口:

interface IConnectionFactory extends IEntityFactory<Connection> { ...} 

然後我可以這樣做:

bind(IConnectionFactory.class).to(ConnectionFactory.class); 

但是,我的項目中已經出現了一個接口爆炸事件。 有沒有更好的方法?