5

次のクラスをセットアップしました。

public abstract class Process<T,S> {
    ...
}

public abstract class Resource<T, S extends Process<T, S>> {
    protected S processer;
    ...
}

public class ProcessImpl<EventType1, EventType2> {
    ...
}

public class ResourceImpl extends Resource<EventType1, ProcessImpl> {
    processer = new ProcesserImpl();
    ...
}

にたどり着くまではすべて順調ResourceImplです。typeProcessImplの境界付きパラメーターの有効な代替ではないと言われています。<S extends Process<T,S>>Resource<T,S>

私はこれを回避するためにさまざまな方法を試しましたが、壁にぶつかり続けています。

誰にもアイデアはありますか?

4

4 に答える 4

11
public class ProcessImpl<EventType1, EventType2> {
...
}

ProcessImpl はProcessを拡張しないためです。あなたの ProcessImpl は Process から派生したものではありません。これは、そのパラメーターを宣言しているものです。

于 2009-06-07T09:49:23.463 に答える
1

次のようなことをしたいかもしれません:

public abstract class Process<T, S> {
}

public abstract class Resource<T, S extends Process<T, S>> {
    S processor;

}

public class ProcessImpl extends Process<EventType1, ProcessImpl> {
}

public class ResourceImpl extends Resource<EventType1, ProcessImpl> {

}

Sのパラメータをプロセッサに制約する場合は、クラスResourceでも適切に宣言する必要があります。ProcessImpl何であるかはわかりませんEventType2が、Process インターフェイスを実装する必要があります。私はあなたが実際に言いたいと思いましたProcessImpl

于 2009-06-07T11:09:37.407 に答える
0

元のバージョンを編集したり、より良い担当者なしで与えられた回答にコメントしたりする方法がわかりません。

このコードはWebレイヤーに存在し、eventtype2は永続レイヤーで定義され、このレベルの下に存在するコアレイヤーでのみアクセスできます。

残念ながら、私が避けたい緊密な結合がなければ、EventType2にアクセスできません。

于 2009-06-07T09:57:03.557 に答える
0

コードがを含む既存のパッケージに依存したくない場合Processは、クラス階層の最下部にあるものに依存しない新しいインターフェイスパッケージを導入することもできます。(もちろん、継承の制約を変更できる場合。)

于 2009-06-07T12:08:28.050 に答える