2012-02-27 88 views
3

我有一個實現類似這樣的接口的類;基於接口字符串名稱的實例化類

... = new Location<ICafe>(); 
... = new Location<IBusiness>(); 
etc 

如果我想擴大Location類型的數量,我需要編輯此刻的代碼。

有沒有一種方法可以基於接口的字符串名稱實例化類?

所以我會從數據庫中獲得Cafe或Business,並且想使用界面的字符串名稱來實例化上述內容。

編輯

我要指出,我用iCafe咖啡廳,匯網等,以後的代碼,以確定哪些類型的項目,這是什麼在屏幕上顯示。

回答

4

是,反射可以讓你做到這一點,但會有幾個步驟:

+0

這很好,但你有硬編碼ICafe,我想要接口作爲字符串。 – griegs 2012-02-27 02:23:51

+0

這只是一個佔位符,以獲得通用。 – 2012-02-27 02:29:28

+0

啊,是的,對不起。得到它的工作謝謝你。 – griegs 2012-02-27 02:36:39

2

在我看來,你可能會被更抽象的受益。是有一些原因,你不能都叫做超接口:

interface IAbstractLocation 

然後,創建使用適當的接口你的具體類,但與這些接口從AbstractLocation類型繼承:

interface ICafe : IAbstractLocation 

interface IBusiness : IAbstractLocation 

然後你將有1種類型:

...Location<IAbstractLocation>(); 

的應處置的任何新類型,您可以添加從IAbstractLocation接口繼承。

+0

但是那麼我怎麼告訴其他地方,這是一個ICafe或IBusiness等? – griegs 2012-02-27 02:25:52

+2

@griegs:這首先破壞了使用多態的目的。我喜歡認爲我不是一個「宗教」程序員,但是如果你必須知道你的泛型參數是哪種類型,或者哪種類型實際上實現了給定的接口,那麼我敢說你可能做錯了。 – 2012-02-27 02:30:00

+0

我不是100%確定,但會在對象上調用getClass()告訴你類名?另外,我同意Ed S.,你可能會想到這是錯誤的方式;)另外,Java是一種類型化的語言,它會限制你可以做些什麼...... – jmort253 2012-02-27 02:30:27

相關問題