通用接口: 重寫與通用簽署的抽象方法,把它
public interface Matcher<T> {
public double getScore(T value1, T value2);
}
兩個實現類:
public StringMatcher implements Matcher<String> {
public double getScore(String value1, String value2) {...}
}
public DateMatcher implements Matcher<Date> {
public double getScore(Date value1, Date value2) {...}
}
到目前爲止,一切都很好。用String
或Date
代替T
不是問題。 調用getScore()
方法也遵循工作原理:當我有不明Matcher
一個List
,我想用getScore()
方法
Matcher<String> matcher = new StringMatcher();
matcher.getScore("hello", "world");
問題開始。
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)
,因爲它無法處理對象參數。 而在這一點上,我不知道如何解決這個問題。我想保留實現類的接口和簽名以及它們的具體類型。如果沒有辦法繞過類型轉換或拋出異常就沒關係。
+1。你比我快。爲了比較對象實例,需要一個「Matcher
非常感謝,那正是我需要知道的。 –