2012-04-07 6 views
2

私の無知を許してください。しかし、私は他の場所で答えを見つけることができませんでした。Java:インスタンス化のためにクラスを関数に渡す方法

int value = 5; 
Strategy s = new Strategy(convert(value)); 
mainClass.setStuff(s, value); 

戦略は、「値」の変換に基づいている番号で初期化されます。

は、私は、次のコードを持っています。 mainClassは未変換の "値"を使用します。

私がしたいのは、mainClassにStrategyが使用する情報と変換されない値のみを与えることによって簡単にすることです。mainClassはStrategyのインスタンス化と初期化を行い、値を処理する必要があります。 Cでは

++これはテンプレートで可能になります:

int value = 5; 
mainClass.setStuff<Strategy>(value); 

は私が何とかJavaでこの作業を行うことができますか? C++とは違ってジェネリックでは機能しないようですが、Javaは引数の型を推論できないので、私は戦略を初期化できません。

答えて

5

setStuffメソッドシグネチャをpublic <T extends Strategy> ReturnType setStuff(Class<T> clazz, int value)に変更します。次にfind the correct constructorを入力してnew instanceを作成します。

+0

しかし、オブジェクトをsetStuffに渡すことは意味しませんか?つまり、私は戦略をインスタンス化し、それをsetStuffに渡す必要があります。これは、再び使用のためにインスタンス化しますか?私はここで優位を見ません。 – Cerno

+0

@Cernoいいえ、オブジェクト自体ではなく、オブジェクトの 'Class'を渡しています。 'Strategy'のクラスを渡したければ' setStuff(Strategy.class、value) 'を呼び出します。 – Jeffrey

+0

ああ、そうだ。私はその1つを行くつもりです。 – Cerno

関連する問題