私は学校用戦艦ゲームの配布版(rmi)を作成しています。ゲームでは、各プレイヤーは艦隊とグリッドを持っているので、私は、このようなリモートオブジェクト実装の非リモートメソッド
class Fleet implements Iterable<Ship> {
private List<Ship> fleet;
...
@Override
public Iterator<Ship> iterator() { return fleet.iterator(); }
}
class Player {
private Fleet fleet;
...
public void placeFleet() {
for (Ship s : fleet) {
...
}
}
}
ようなコードを書くためにイテレータを使用できるようにしたかったが、私のクラスFleet
は、リモートクラスにする必要があるので、私は何かを持っていますiterator()
方法は、リモート・メソッドではありませんので、このよう
interface IFleet extends Remote, Iterable<IShip> {...}
class Fleet extends UnicastRemoteObject implements IFleet {...}
はしかし、これはつまり、私はまた
012で試してみたillegal remote method encountered: public abstract java.util.Iterator java.lang.Iterable.iterator()
を取得し、エラーが発生します
interface IFleet extends Remote {...}
class Fleet extends UnicastRemoteObject implements IFleet, Iterable<IShip> {...}
だから私は2つの質問がありますのみ
- リモートオブジェクトはリモート実装することができ、そのサブインターフェイスを?
- rmiクライアントから遠隔オブジェクトのメソッドを何とか隠すことができます(利用できないようにして、はにリモートインターフェイスのニーズを尊重することができます)。
ありがとうございました!
Ps:他の方法でクライアントのリストのイテレータを使うことができますが、リモートと一緒に他のインターフェイスを実装できるかどうかは不思議です。
'Iterable'はインタフェースで、 'extends'ではなく' implements'を意味しましたか? –
StaticBeagle
ああ、申し訳ありませんが、私はコードの第2ビットで間違っています –