Я работаю над распределенной версией (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
также должен быть удаленным классом, поэтому у меня есть что-то вроде этого
interface IFleet extends Remote, Iterable<IShip> {...}
class Fleet extends UnicastRemoteObject implements IFleet {...}
Однако это вызывает ошибку, потому что метод iterator()
не является удаленным методом, т.е. я получаю 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> {...}
И так у меня два вопроса:
- Может ли удаленный объект реализовать только Remote и его подынтерфейсы?
- Могу ли я каким-то образом скрыть методы в удаленных объектах от клиента rmi (сделать их недоступными и, таким образом, позволить им НЕ учитывать потребности удаленного интерфейса)?
Спасибо!
Ps: я знаю, что могу использовать итератор по списку в клиенте каким-то другим способом, но эта ошибка просто заставила меня задуматься, можно ли реализовать другие интерфейсы вместе с Remote.
Iterable<T>
— это интерфейс, вы имели в видуimplements
вместоextends
? - person StaticBeagle   schedule 09.12.2017