groovy의 스크립팅 구문을 사용하여 속성을 할당하지만 특정 케이스에 문제가있는 경우 편리합니다. 나는 여기서 간단한 것을 놓치고 있어야합니다. 그래서 같은 클래스 A, B, C를 정의 : 다음Groovy의 메소드 오버로드
class A {
A() {
println "Constructed class A!"
}
}
class B {
B() {
println "Constructed class B!"
}
}
class C {
private member
C() {
println "Constructed class C!"
}
def setMember(A a) {
println "Called setMember(A)!"
member = a
}
def setMember(B b) {
println "Called setMember(B)!"
member = b
}
}
그리고 스크립트에서 다음 통화 시도 :
c = new C()
c.setMember(new A()) // works
c.member = new A() // works
c.setMember(new B()) // works
c.member = new B() // doesn't work!
오류의 마지막 할당 결과 : '클래스 B의 개체를 캐스팅 할 수 없음을 클래스 A "와 같은 클래스 B에 대한 적절한 setMember 메서드를 호출하지 않는 이유는 무엇입니까?
있지만, 올바른 접근 방식은 그렇게하지 않습니다! 다른 매개 변수 유형에 대해 다른 메소드를 작성하거나 유형이 공통 인터페이스를 구현하도록하십시오. 메소드 오버로딩은 최상의 때에 악하지만, Groovy의 느슨한 타이핑은 철저히 악마 적입니다. –