使用不同对象作为参数调用相同的方法

时间:2012-04-11 16:56:42

标签: java

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

3 个答案:

答案 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 ..

发送(请求请求)