2016-04-27 9 views
1

基本的に次の構文を達成しようとしています(現在はコンパイルしていません)。誰かがこれを達成する方法を説明できるなら、私はそれを感謝します。事態を複雑にし、私は私が予想される移行のための抽象DAO層離れにこれを行うにしようとしています繰り返しインターフェイスメソッドでサブタイプのキャプチャを宣言する

public interface Organization { 
    Organization add(Hub hub); 
} 

public class JpaOrganization implements Organization { 


    @OneToMany(mappedBy = "organization", cascade = CascadeType.ALL) 
    private Set<JpaHub> hubs = new LinkedHashSet<>(); 


    @Override 
    public JpaOrganization add(JpaHub hub) { 
     hub.setOrganization(this); 
     hubs.add(hub); 
     return this; 
    } 
} 

    public interface Hub { 
    void setOrganization(Organization organization); 
    } 


public class JpaHub implements Hub { 
    @Override 
    public void setOrganization(JpaOrganization organization) { 
     this.organization = organization; 
    } 
} 

オーバーロードされた「追加」メソッドを持っています。したがって、すべてのJPA実装ではJPA実装を処理しているとみなすことができます。これはすべてのリフレクションが機能するために不可欠です。

私はタイプをキャプチャする必要がありますが、この特定のアレンジの構文は私にはわかりません。

<O extends Organization, H extends Hub> O foo(H hub); 

実装:

私のような何か試してみました

@Override 
    public JpaOrganization add(Hub hub) { 
     return this; 
    } 

をそして、これはコンパイルが、私が何か間違ったことかもしれない私に示して確認警告を与えます。私が何を読んでいるかに基づいて、私はいくつかの警告なしでこれを行うことができるとは確信していません。

+0

をあなたは上記のコードでにこれを適用しようとしている方法に 'foo'を変更することができますしてください。 –

答えて

1

クラスレベルで型変数を定義します。

public interface Organization<O extends Organization, H extends Hub> { 
    O add(H hub); 
} 
+0

これは、これらの2つのタイプだけで動作します。私はいくつかのオーバーロードされたaddメソッドを持っています –

+0

これらのaddメソッドで同じ型変数を使用するか、必要に応じてクラスレベルで新しい型変数を追加します。 –

関連する問題