汎用インターフェース:
public interface Matcher<T> {
public double getScore(T value1, T value2);
}
2 つの実装クラス:
public StringMatcher implements Matcher<String> {
public double getScore(String value1, String value2) {...}
}
public DateMatcher implements Matcher<Date> {
public double getScore(Date value1, Date value2) {...}
}
これまでのところ、すべて問題ありません。orに置き換えT
ても問題ありません。次のようにメソッドを呼び出しても機能します。String
Date
getScore()
Matcher<String> matcher = new StringMatcher();
matcher.getScore("hello", "world");
List
未知の があり、その方法Matcher
を使用したい場合に問題が発生します。getScore()
public void test() {
List<Matcher<?>> list = new ArrayList<Matcher<?>>();
list.add(new StringMatcher());
list.add(new DateMatcher());
for (Matcher<?> matcher : list) {
Object value1;
Object value2;
//Setting values value1 & value2 appropriate to the current matcher
matcher.getScore(value1, value2);
}
}
matcher.getScore(value1, value2)
オブジェクト パラメータを処理できないため、呼び出すことができません。そして、この時点で、これを解決する方法がわかりません。具象型を持つ実装クラスのインターフェイスとシグネチャを保持したいと考えています。型のキャストや例外のスローを回避する方法がない場合は、問題ありません。