일반 인터페이스를 호출 : 일반적인 서명 추상 메소드를 재정의하고 그것을
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) {...}
}
지금까지 모든 것이 괜찮습니다. T
을 String
또는 Date
으로 바꾸는 것은 문제가되지 않습니다. 작동 또한 다음과 같이 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)
을 호출 할 수 없습니다. 그리고이 시점에서 나는 이것을 어떻게 풀어야할지 모른다. 구현 클래스의 인터페이스와 서명을 구체적인 유형으로 유지하려고합니다. 캐스팅 또는 예외를 throw하는 것이 주위에 아무 것도 없다면 괜찮습니다.
+1. 너는 나보다 빨랐어. Object 인스턴스를 비교하려면 Matcher
고마워, 정확히 내가 알 필요가있는 thats. –