다음은 자바에서 할 수있는 일의 예입니다.인터페이스의 매개 변수화는 하나만 구현 될 수 있습니다. 즉, 어떻게 해결할 수 있습니까?
interface MyInterface<E> {
public void doSomething(E foo);
}
class MyClass implements MyInterface<ClassA>, MyInterface<ClassB> {
public void doSomething(ClassA fooA) {
...
}
public void doSomething(ClassB fooB) {
...
}
}
이것을 구현하려고하면 컴파일러에서 MyClass
을 한 번만 구현할 수 있다고 알려줍니다. 나는 MyInterface<ClassA>
가 MyInterface<ClassB>
에 비해 다른 유형으로 취급되지만 분명히 그렇지 않다고 생각했다. 이것은 매우 유용 할 것 같은데, 그래서 나는 그 오류에 놀랐다.
업데이트 : 지금까지 도움을 주셔서 감사합니다. 지적 된 의견 중 하나로서, 위의 내용은 추상적입니다. 내가 해결하려고하는 문제는 관찰자 클래스가 구현하는 인터페이스를 통해 관찰하는 클래스를 관찰자 클래스가 선언하고 클래스 별 메서드에서 관찰하는 객체의 변경 사항을 처리하는 방식으로 Observer 패턴을 구현하는 것입니다. 이러한 접근법을 사용하는 이점은 인터페이스에서 클래스가 어떤 유형의 객체를 구현하는지 명확하고 컴파일러가 프로그래머에게 관찰 된 클래스의 인스턴스에 대한 변경 처리를 명시 적으로 구현하도록 강제하는 것입니다. 따라서 위의 추상 코드는 실제로 다음과 같을 수 있습니다.
interface IsObserverOf<E> {
public void observedDidChange(E foo);
}
class MyClass implements IsObserverOf<Database>, IsObserverOf<Spreadsheet> {
public void observedDidChange(Database database) {
...
}
public void observedDidChange(Spreadsheet spreadsheet) {
...
}
}
여기에서 MyClass는 데이터베이스 개체와 스프레드 시트 개체를 관찰하고 컴파일러는 두 가지 서로 다른 observedDidChange() 메소드를 구현해야합니다.
고마워.
당신이 해결하려고하는 문제에 대한 모든 참조를 제거하고 대답하기 어려운 질문 만 게시했습니다. 문제를 게시 할 수있는 경우 (예 : 두 가지 유형의 CustomersHandlers) 우리는 모두 당신의 문제를 풀려고 노력할 수 있습니다. (당신의 질문에 대답하는 것보다 더피모가 디자인 패턴을 제안하는 것과 같이) 당신은 훨씬 더 좋은 대답을 얻을 수 있습니다. 후자! =) – Tim