通用接口:
public interface Matcher {
public double getScore(T value1, T value2);
}
两个实施类:
public StringMatcher implements Matcher {
public double getScore(String value1, String value2) {...}
}
public DateMatcher implements Matcher {
public double getScore(Date value1, Date value2) {...}
}
到目前为止一切都很好.用字符串或日期替换T不是问题.
按如下方式调用getScore()方法也有效:
Matcher matcher = new StringMatcher();
matcher.getScore("hello", "world");
当我有一个未知匹配的List并且我想使用getScore()方法时,问题就开始了.
public void test() {
List> list = new ArrayList>();
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),因为它无法处理对象参数.
在这一点上,我不知道如何解决这个问题.我想保持实现类的接口和签名及其具体类型.如果无法进行类型转换或抛出异常,那就没关系.