clone() 메서드를 구현하려면 클래스가 필요한 인터페이스를 작성하고 있습니다. 다른인터페이스에 지정된 복제 메서드를 입력합니다.
public interface ISolvableGame {
function clone():ISolvableGame;
//...
}
:이 내 순진한 접근 방식은 다음과 같은 라인을 따라 갔다
내가MyGame.clone()
이 ISolvableGame를 구현하는 클래스의 인스턴스를 반환하기 때문에 서명의이 종류의 법적 될 것이라고 생각했다
public class MyGame implements ISolvableGame {
public function clone():MyGame {
// ...
}
}
이것은 인터페이스에서 계약을 만족시키는 것으로 보인다. 그러나 위의 코드는 MyGame.clone()
이 인터페이스에 지정된 서명과 다른 서명을 가지고 있다는 사실을 참조하여 컴파일 오류를 생성합니다.
내 질문은 구현 된 메소드가 인터페이스의 서명과 정확히 일치해야한다면 어떻게하면 복제 메소드가 필요한 인터페이스를 만들 수 있습니까? 분명히 인터페이스를보다 구체적으로 만드는 것은 의미가 없습니다. 그러나 구현 된 메소드의 구체성을 덜 구체화 한 경우 (즉, MyGame.clone()
을 ISolvableGame
으로 반환하면) 해당 클론 메소드의 다른 사용자는 더 이상 얻지 못한 것을 알 수 있습니다.
두 가지 버전의 복제 방법이 필요합니다. 하나는 ISolvableGame
으로 입력하고 다른 하나는 MyGame
으로 입력하면됩니다. 아니면 더 나은 방법이 있습니까?
참고 : 나는, 액션합니다 (ECMA4 사양을 구현하는 자바와 같은 언어)에서 일하고 있어요. AS3은 인터페이스를 다루는 방식이 독특하지 않다는 가정하에 이것을 언어에 구애받지 않는다고 태그했습니다. 그러나 위의 샘플 코드가 다른 언어로 작동한다면 문제는 제 언어에만 해당 될 수 있습니다.
업데이트 : 그것은이 내 언어 거래의 방법 핵심 라이브러리를 검사하는 나에게 발생했습니다. 예를 들어, IEventDispatcher
인터페이스가 있습니다.이 인터페이스는 dispatch():Event
메서드를 정의합니다. 하위 클래스이 Event
인 모든 클래스는 궁극적으로 내 문제와 비슷합니다. IEventDispatcher
을 구현할 수 없습니다.
라이브러리 대신 IEventDispatcher
을 구현하기위한 목적으로 존재하는 클래스 EventDispatcher
에서을 상속 같은 클래스를함으로써이 다루는 핵심. 따라서 컴파일 타임 형 안전성을 얻지 만, 처음에는 인터페이스를 사용하는 지점을 희석시키는 대신 일반적으로 상속으로 인한 문제를 피하기 위해 인터페이스를 선호하기 때문에.내 선택은
내가 생각하고있는 것을 : 핵심 라이브러리 프레데릭 설명으로
- 다른 이름
- 희생 컴파일 타임 유형, 상속에 궁극적으로 의존 제임스 안전에 대해 설명
답 : 결국, 나는 인터페이스가 cloneToSolvable
메소드를 지정하도록하는 옵션을 가지고 갔다. 즉, 인터페이스는 인터페이스 타입에 복제 할 메소드를 지정하고, 클래스를 구현하기 위해서는 더 구체적으로 유형이 지정된 복제 메소드 이외에 메소드가 있어야한다. 이있을 수 있습니다. 이것은 나에게 옵션의 가장 불쾌한 것 같았다.
의견을 보내 주셔서 감사합니다. 내 업데이트를보고 제 요약 내용에 동의하는 경우 알려 주시기 바랍니다. – fenomas