2012-02-27 2 views
3

私はこのようなインタフェースを実装するクラスを持っています。インタフェース文字列名に基づいてクラスをインスタンス化します

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

私は、現時点では、コードを編集する必要がありLocation種類の数を拡張したい場合。

インタフェースの文字列名に基づいてクラスをインスタンス化する方法はありますか?

だから私は、データベースからカフェやビジネスを得るだろうと私は上記のインターフェイスの文字列名を使用してインスタンス化したいと思います。

編集

私は、これは、どのような画面に表示する項目の種類を決定するために、コードの後半で、あるthe icafe、IBusinessなどを使用することに注意してください。

答えて

4

はい、反射は、あなたがこれを行うようになるが、いくつかのステップがあります:

+0

これは素晴らしいことですが、あなたはハードなICafeをコード化しており、そのインターフェースを文字列として使用したいと考えています。 – griegs

+0

これは、ジェネリックを取得するための単なるプレースホルダです。 –

+0

ああ、申し訳ありません。ありがとうございました。 – griegs

2

あなたも、より抽象的なものから利益を得ることができるように私には思えます。あなたはスーパーインタフェースが呼び出されていないことができますいくつかの理由があります:

その後
interface IAbstractLocation 

、適切なインタフェースを使用して、具体的なクラスを作成しますが、これらのインターフェイスはAbstractLocationタイプから継承すると:

interface ICafe : IAbstractLocation 

interface IBusiness : IAbstractLocation 

その後、

...Location<IAbstractLocation>(); 

IAbstractLocationインターフェイスから継承する新しいタイプを処理する必要があります。

+0

ですが、これはICafeやIBusinessなどの他の場所にどのように伝えますか? – griegs

+2

@griegs:それは最初の場所で多型を使用する目的を本当に破っています。私は "宗教的な"プログラマーではないと思っていますが、一般的な議論がどのタイプであるか、どのタイプが実際には与えられたインターフェースを実装しているかを知っていなければならないでしょう。 –

+0

私は100%確信していませんが、オブジェクトのgetClass()を呼び出すと、クラス名がわかりますか?また、私はEd S.に同意します、あなたはこれを間違った方法と考えているかもしれません;)さらに、Javaはタイプされた言語であり、あなたが何かできることを制限します... – jmort253