私にはclasstypeのリストがあります。私は、明確な価値を処理することができる特定のクラスを見つけたいと思っています。メソッドの実装でクラスを動的に見つける方法は?
次の例では、各実装でsupports(String)
メソッドを提供する必要があります。また、このクラスでサポートされる値を定義します。
問題:オブジェクトはリストにありませんが、クラスタイプです。したがって、私はsupports()
のようなカスタムメソッドを呼び出すことはできません。
List<Class<MyService>> list;
public Object getInstanceThatSupports(String val) {
val = "TEST";
for (Class<MyService> c : list) {
if (c.supports(val)) { //TODO this is invalid
return c.newInstance().process(val);
}
}
}
public interface MyService {
boolean supports(String val);
void process(String val);
}
public class MyServiceImpl implements MyService {
@Override
public boolean supports(String val) {
return val.equals("TEST");
}
@Override
public void process(String val) {
//handle the value
}
}
どうすればいいですか?
反射を使用する方法がありますが、それはあなたが望むものは非常に明確ではありません – Jens
よく。私の入力値が 'TEST'の場合、その値をサポートする' MyService'実装を探したいと思います。 'supports(val)'メソッドで定義されています。しかし、私はclasstypeのメソッドを呼び出すことはできませんので、私はこのように見つけることはできません。 – membersound
新しいinstaceを作成し、それを 'c.newInstance()。supports(" TEST ");' – Jens