您可以尝试扩展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;
}
所有参数和所有非void返回类型必须是Serializable的原因。 String 是 Serializable。
除此之外,这似乎是一个非常糟糕的设计。这些接口旨在表示每个端点提供的操作。另一方面,Serializable stuff 是端点之间传输的数据。通过创建同时使用这两种帽子的类/对象/接口,它肯定会变得一团糟。
一个更好的主意是:
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;
}