2012-04-11 46 views
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()的参数,以允许任何类型的请求给予作为论据。

回答

1

的规范方法是声明的接口,并且使混凝土请求类实现该接口:

public interface IRequest { ... } 

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

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

public static void send(IRequest request) { ... } 
1

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

如果不成功,您的send方法可能会引用Object类型的参数,但那样会非常糟糕,因为您只能在不投射的情况下访问Object方法。

1

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

E.g. Class CheckServerOnlineReq扩展/实现请求..

发送(请求请求)

相关问题