2017-03-28 26 views
0

私はparse(String x)という1つのメソッドからなるインターフェイスLogParserを持っています。私はまた、すべてのLogParserを実装する複数のクラスの名前を含むArrayListを持っています。このクラス名のリストをループし、それぞれのクラスを動的にインスタンス化し、parse(String x)を呼び出すことは可能ですか?インターフェイスを実装し、インターフェイスメソッドを呼び出すクラスを動的にインスタンス化します

私が持っていた問題は、クラスには引数のないコンストラクタがないため、リフレクションを通してParseメソッドを呼び出そうとしているInstantiationExceptionをたくさん実行したことです。

ありがとうございます!

答えて

0

実装タイプにコンストラクタがない場合は、非常に苦労します。 SpringやGuiceのような依存性注入フレームワークを使うのが一番簡単な方法です。春に

、あなただけList<LogParser>を注入でき、そして、あなたはすべての既知の実装を得るでしょう:

@Autowired 
private List<LogParser> parsers; 

今もちろん、あなたは春のBeanとして別途LogParser Sのそれぞれを定義する必要があります。

他のフレームワークでも同様の機能があります。

0

オブジェクトをインスタンス化するには、いくつかのコンストラクタを呼び出す必要があります。リフレクションを使用してコンストラクタのMethodを取得し、それを使ってインスタンス化します。 Instantiate a class object with constructor that accepts a string parameter?を参照してください。もう一つの質問があるので、私は重複して閉じることはありませんでした:すべてのクラスに同じシグネチャを持つコンストラクタがあることを知っていますか?

関連する問題