2017-10-24 6 views
1

Groovy Traits에 관한 많은 블로그에서 다이아몬드 문제를 해결할 것이라고 언급했습니다. 하지만 그 특성이 어떻게 다이아몬드 문제를 해결할 것인지는 분명하지 않습니다.그루비 특유의 다이아몬드 문제

아무 설명해주세요.

답변

2

diamond problem은 다중 상속이 있고 두 개 이상의 수퍼 클래스가 동일한 서명으로 하나 이상의 함수를 정의 할 때 문제가됩니다.

Groovy 형질을 사용하면 동작이 잘 정의됩니다. 기본적으로 마지막 구현이 선택됩니다.

class E implements A,B { 
    String name() { A.super.name() + B.super.name() } 
} 

assert new E().name() == "AB" 
+0

이 특성은 자바 (8)와 동일한 방식으로 다이아몬드 문제를 해결 자바 8. – Souvik

+0

의 같은 방식으로 처리됩니다

trait A { String name() { "A" } } trait B { String name() { "B" } } class C implements A,B { } class D implements B,A { } assert new C().name() == "B" assert new D().name() == "A" 

당신이 원하는 하나를 선택 할 수있다. 확인 할수 있어요. – Souvik

+0

@Souvik 간단한 대답은 no입니다. Java 8은 인터페이스에서 기본 구현으로 다이아몬드 문제가 발생했을 때 다르게이를 해결합니다. 예를 들어 [이 블로그 게시물] (https://www.javabrahman.com/java-8/java-8-multiple-inheritance-conflict-resolution-rules-and-diamond-problem/)을 참조하십시오. 자바 8의 충돌 해결 규칙. – Steinar