我有一个程序将请求发送到服务器。有许多不同类型的请求,每个都有自己的类。例如,我有一个checkServerOnlineRequest
向服务器发送短消息,或getAmountOfGoldRequest
发送一条非常不同的消息。
class CheckServerOnlineReq{
static final byte requestID = 1;
byte[] message;
void setMessage(byte messageNumber){
message = new byte[2];
message[0] = messageNumber;
message[1] = requestID;
}
}
要发送请求,我有一个Client
课程。它有static
方法send
,我想接受任何类型的请求(即许多不同的类)
我的问题是,我如何设置send()
的参数以允许任何类型的请求作为参数。
答案 0 :(得分:1)
您的所有请求类都应该从您定义的基类Request
类扩展。您的静态方法应该使用Request request
的参数。你的基类Request
类(可能是抽象的,可能实现一个接口 - 细节取决于究竟发生了什么)应该定义请求使用的所有方法,而不管请求的实际类型。
如果不这样做,你的send
方法可以接受Object
类型的参数,但这非常糟糕,因为你只能在不进行转换的情况下访问Object
方法。 / p>
答案 1 :(得分:1)
规范的方法是声明一个接口,并使具体的请求类实现该接口:
public interface IRequest { ... }
public class CheckServerOnlineRequest implements IRequest { ... }
public class GetAmountOfGoldRequest implements IRequest { ... }
然后send()
方法可以接受IRequest
作为其参数。
public static void send(IRequest request) { ... }
答案 2 :(得分:1)
使所有请求子类化/实现Request-class / interface,并使send方法具有Request作为参数。
E.g。 class CheckServerOnlineReq扩展/实现Request ..
发送(请求请求)