2017-12-09 36 views
3

与えられたインタフェースを実装するクラスの型であるparamenterの型を設定できるかどうか知りたいです。いくつかのコードを見ると、質問はより明確になります:インターフェイスの実装クラスの型パラメータを設定するには?

interface A { 
A sum (???? another); 
} 

class AClass implements A { 
    private int internalStuff; 

    A public sum (???? another) { 
     // I want to access another.internalStuff in a type safe fashion 
    } 
} 

もちろん私は? A型で、AClass.sumの中にAClassにキャストしますが、それは醜いです。できる "????"意味のある型宣言に置き換えられますか?

答えて

3

Javaには自己型がないので、これを達成するにはちょっとした工夫が必要です。

インターフェイスにバインドされた再帰型で型パラメータを追加できます。実装クラスは、このパラメータを独自の型に設定します。このように:

interface A<T extends A<T>> { 
    A sum (T another); 
} 

class AClass implements A<AClass> { 
    private int internalStuff; 

    public A sum(AClass another) { 
     // .... 
    } 
} 

しかしimplements A<SomeOtherAClass>をやってからAClassを止めるものは何もありません。正しい型パラメータを提供するには、実装クラスを信頼する必要があります。

+0

奇妙な構文ですが意味的に意味があります。ありがとう –

+0

保護された変数で抽象クラスを使用することもできます – Gaskoin

関連する問題