2017-07-07 4 views
1

型を汎用パラメータで相互参照しようとしています。有限バウンド制限に違反:スローパラメータの型を相互参照する方法

interface Group<C : Child<*>> { 
    val children: List<C> 
} 

interface Child<G : Group<*>> { 
    val parent: G 
} 

internal inner class MyGroup : Group<MyChild> { 
    override val children: List<MyChild>? 
    get() = null 
} 

internal inner class MyChild : Child<MyGroup> { 
    override val parent: MyGroup? 
    get() = null 
} 

:中AndroidStudioの "Kotlinに変換" 機能の結果を使用して

public interface Group<C extends Child> { 
    List<C> getChildren(); 
} 

public interface Child<G extends Group> { 
    G getParent(); 
} 

class MyGroup implements Group<MyChild> { 
    @Override 
    public List<MyChild> getChildren() { 
    return null; 
    } 
} 

class MyChild implements Child<MyGroup> { 
    @Override 
    public MyGroup getParent() { 
    return null; 
    } 
} 

:Javaでは は、私はこれを持っています。

kotlinにこのようなコードを書く方法はありますか?

+1

このヘルプは、https://stackoverflow.com/questions/43786012/cross-references-in-type-parametersを参照してください。 –

+0

@ zsmb13 mybe複製されています。答えは完璧な方法ではありません。 –

答えて

1

私はそんな風にはありません。これは別の汎用パラメータを導入するためです。代わりに、あなたは、たとえば、関係を記述するために中央の役割Nodeインターフェースを導入することができます

interface Node<out T>; 

interface Group<out C : Node<*>> : Node<C> { 
    val children: List<C> 
} 

interface Child<out G : Group<*>> : Node<G> { 
    val parent: G; 
} 

class MyGroup : Group<MyChild> { 
    override val children: List<MyChild> 
     get() = TODO("not implemented") 
} 

class MyChild : Child<MyGroup> { 
    override val parent: MyGroup 
     get() = TODO("not implemented") 
} 

真ん中の役割をちょうどkotlin.Functionなどのように:

public interface Function<out R> 

を:out分散はオプションです。

+0

すばらしい解決策!重複した質問にこの回答を書いたら、そこにアップアップしてこの質問を削除することができます。 – Simas

+0

@シマサール、私の答えを認めてくれてありがとう。私は英語が上手ではありません。私はそれを繰り返すのは好きではありません。それはちょうどここに住みましょう。 :) –

関連する問題