이 문제는 Kotlin class delegation이 생성자 매개 변수로만 위임 할 수 있으므로 사실상 생성자에게 인수를 제공해야합니다.Kotlin에서 인터페이스에 위임하고 인수가없는 public 생성자 만 제공하는 방법은 무엇입니까?
다음은이 문제의 구체적인 사용 사례와 관련된 원래의 질문입니다.
나는 다음을 수행 할 :
val myTable1: MyTable = MyTable()
곳
MyTable
ImmutableTable (src)에서 상속 또는 적어도 Table- 내가 수동으로 위임 할 필요가 없습니다 모든 기본 구현에 대한 모든
Table
메소드.
은 또한 다음과 같은 피하고 싶은 :
val myTable2: MyTable = MyTable.build()
즉 내가 동반자를 사용하도록 강제하지 않으려는/static 팩토리 메소드를 객체.
나는 ImmutableTable
을 연장하려고 시도했지만, 나는 This type has a constructor, and thus must be initialized here
이되었습니다.
Table
인터페이스를 확장하여 (재 구현 방법을 피하기 위해) 위임하려고했지만 그 다음에 생성자 매개 변수 Table
의 인스턴스를 제공해야합니다. 그냥 init {}
블록에서 초기화 할 수 없습니다.
정확한 시도는 this gist을 참조하십시오. 사용
코 틀린 버전 : 1.0.2
의견에서 언급 한 바와 같이
해결하려는 문제를 설명해 주시겠습니까? 필자는'ImmutableTable'에서 파생되는 것이 쉬운 일은 아니지만 이것이 최종 목표는 아니라고 생각합니다. – miensol
제 최종 목표는 Table 인터페이스를 상속 (확장/구현)하는 클래스의 인수가없는 생성자를 호출 할 수있게하는 것입니다. 동시에 모든 테이블 메서드를 다시 구현해야하는 것은 아닙니다. 테이블의 많은 메소드를 구현할 때 ImmutableTable을 상속 할 수 있기를 바랬지 만, 당신이 ImmutableTable을 설계 상으로는 상속받을 수 없다는 것이 맞을 수도 있습니다. 이 경우 필자는 Table과 직접 작업해야합니다. 그러나 테이블에 위임하려면 메서드를 다시 구현하지 않으려면 Table을 arg로 사용하는 생성자를 사용해야합니다. –
나는 Kotlin을 모른다. 그러나 : ['ForwardingTable'] (http://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/ForwardingTable.html) 도움이 되나요? 이리? 'ImmutableTable'과 달리, 확장 가능합니다. 'ImmutableTable' 델리게이트로 전달할 수 있습니다. –