trait A {
def a
def b
def c
}
object A {
def apply = {
new A {
def a = 1
def b = 2
def c = 3
}
}
}
여기에 특성 A가 있고 동반 객체의 적용 메서드가이를 구현합니다.
trait B extends A {
def d
}
object B {
def apply = {
new B {
def d = 4
}
}
}
A의 a / b / c 메서드도 구현해야하므로 특성 B는 물론 컴파일되지 않지만 A의 apply 메서드를 호출 한 다음 B의 d 메서드를 구현할 수있는 방법이 있습니까?
나는 B.apply에서 a / b / c를 재정의하고 super.a / b / c를 호출하는 것이 한 가지 방법이라고 생각하지만 여러 레이어 A-> B-> C-> D가 있으면 어떨까요? 리프 노드에있는 모든 슈퍼 클래스의 메서드를 재정의합니다.
어떤 생각이라도 도움이 될 것입니다, 감사합니다!
변경할 수 있다면 A
가장 합리적인 해결책은 다음에서 반환 된 익명 클래스에 이름을 지정하는 것입니다 A.apply()
.
object A {
class AImpl extends A {
def a = 1
def b = 2
def c = 3
}
def apply = new AImpl
}
object B {
def apply = {
new AImpl with B {
def d = 4
}
}
}
B.apply에서 a / b / c를 재정의하고 super.a / b / c를 호출하는 것이 한 가지 방법이라고 생각합니다.
아니요, 작동하지 않습니다. 그럴 경우 재정의 할 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다