2

Person を表現したいとしましょう

public interface Person {

    String getFirstName();

    String getLastName();

}

これはJPAで実装されています(コードはかなり平凡なので見逃しています)

今、私はモデルを持ちたいと思っています。そのインターフェースは、セッターメソッドを備えた個人インターフェースの拡張です

public interface PersonModel extends Person {

    void setFirstName(String firstName);

    void setLastName(String lastName);

}

そして、Model インターフェースの具体的な実装を実装します (これも非常に平凡なのでスキップしています)。

これを行う中で、「PersonModel は Person ではない」ため、Person から拡張された PersonModel はあまり意味がないことに気付きました。

PersonModel を Person にキャストすることも「正しく」ありません。

これを実装する正しい方法は何ですか - PersonModel は Person から継承してメソッドを再定義することはできませんでしたが、それは余分なメンテナンスを意味します。

メソッドを別の基本インターフェイス -> PersonBase(?) に抽出し、そこから Person (他のメソッドは定義されていません) と PersonModel の両方を拡張できます。

上記のパスをたどる場合、基本インターフェイスに名前を付ける最良の方法は何ですか?

私がインターフェイスを使用している主な理由の 1 つは (すべてがどのように機能し、どのように連携するかを考えるのに役立つという事実は別として)、さまざまな実装レイヤー (JPA2/NoSQL ドライバーなど) を簡単に作成できるようにするためです。

これは使用されている実際のコードではないため、構文エラー/タイプミスを許してください-この質問の目的のために書きました。

考え/指導/アドバイスをいただければ幸いです。

4

1 に答える 1

0

アップキャストはうまくいくようです:

package person;

public class PersonApp {
    public static void main(String [] args)
    {
        ConcretePerson p = new ConcretePerson("Superman");
        System.out.println(p.getName());
        PersonModel pm= p;
        System.out.println(pm.getName());
        Person pn=p;
        System.out.println(pn.getName());
        Person pnm=pm;
        System.out.println(pnm.getName());
    }
}

プログラム出力:

Superman
Superman
Superman
Superman
于 2012-11-20T03:46:26.837 に答える