0

我有一个向服务器发送请求的程序。有许多不同类型的请求,每个都有自己的类。例如,我有一个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()'s 参数以允许将任何类型的请求作为参数给出。

4

3 回答 3

1

您的所有请求类都应该从Request您定义的基类扩展。您的静态方法应采用Request request. 你的基Request类(可能是抽象的,可能实现一个接口——细节取决于具体发生了什么)应该定义请求使用的所有方法,而不管请求的实际类型如何。

如果做不到这一点,你的send方法可以接受 type 的参数Object,但这真的很糟糕,因为你只能在Object没有强制转换的情况下访问方法。

于 2012-04-11T16:59:08.790 回答
1

规范的方法是声明一个接口,并使具体的请求类实现该接口:

public interface IRequest { ... }

public class CheckServerOnlineRequest implements IRequest { ... }
public class GetAmountOfGoldRequest implements IRequest { ... }

然后该send()方法可以接受IRequest作为其参数。

public static void send(IRequest request) { ... }
于 2012-04-11T17:00:26.453 回答
1

使所有请求子类/实现一个请求类/接口,并使您的发送方法具有请求作为参数。

例如类 CheckServerOnlineReq 扩展/实现请求..

发送(请求请求)

于 2012-04-11T17:01:14.347 回答