3

私は2つのクラスを持っています。Status1Status2

これら 2 つのステータスには、共通の変数が 1 つあります。

protected A a;

そして、一般的ではないもの:

class Status1 {
    protected A a;
    protected ListStatus1.B version;
}

Bクラスstatic class内ですStatus1

class Status2 {
    protected A a;
    protected Status2.C version;
}

Cクラスstatic class内ですStatus2

だから今私はインターフェースを作りたいStatus

ここで追加できvariable Aます。getVersionここで、静的クラスを返すメソッドを追加する必要がありますStatus1 / Status2

protected abstract ?? getVersion();

return typeしかし、そこに何があるべきかわかりません

このインターフェイスに静的クラスを追加しようとすると、このクラスが返されますが、成功しません

4

4 に答える 4

2

「正しい方法」は、2 つの静的クラス B と C に共通の emptyinterfaceを実装させることです。「バージョン化」を呼び出しましょう。

public interface Versioned{}

static class B implements Versioned{
...
}
static class C implements Versioned{
...
}

その後、次のように記述できます。

 protected abstract Versioned getVersion();

メソッドは B または C のいずれかを返すことができます。

于 2012-11-05T10:57:05.133 に答える
1

Objectはトリックを行うべきだと思います!

ただし、オブジェクトのフィールドにアクセスすると、問題が発生する可能性があります。Versionしたがって、両方のステータスの内部クラスによって実装されるインターフェースを持つことをお勧めします。

お役に立てれば、

乾杯

于 2012-11-05T10:52:37.880 に答える
1

Status1.Bとの違いがオブジェクト モデルに不可欠な場合は、ジェネリックStatus2.Cにすることができます。Status

public interface Status<V> {
    public V getVersion();
}

public class Status1 implements Status<Status1.B> {
    public Status1.B getVersion() { ... }
    ...
}

それ以外の場合は、他の回答で示唆されているように、両方のバージョン クラスにインターフェイスを導入できます。

于 2012-11-05T10:54:30.737 に答える
0

1 つの方法は、インターフェイスを作成し (それを と呼びましょうIVersion)、両方のバージョン クラスにそのインターフェイスを実装させることです。このgetVersion()メソッドは、次のインターフェイスを返すことができます。

protected abstract IVersion getVersion();
于 2012-11-05T10:54:30.083 に答える