Вы можете попытаться расширить java.io.Serializable
:
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatServer extends Remote, Serializable {
void register(ChatClient c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatClient extends Remote, Serializable {
void register(ChatServer c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
Причина, по которой все параметры и все типы, не являющиеся пустыми возвращаемыми значениями, должны быть Serializable
.String
- это Serializable
.
Кроме этого, это очень плохой дизайн.Эти интерфейсы предназначены для обозначения операций, предлагаемых каждой конечной точкой.С другой стороны, Serializable
- это данные, передаваемые между конечными точками.Создавая классы / объекты / интерфейсы, которые используют обе шляпы, это, безусловно, становится большим беспорядком.
Лучшей идеей будет:
import java.io.Serializable;
public class ClientId implements Serializable {
// Data used to identify the client.
}
import java.io.Serializable;
public class ServerId implements Serializable {
// Data used to identify the server.
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatServer extends Remote {
void register(ClientId c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatClient extends Remote {
void register(ServerId c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}