【发布时间】:2015-09-26 06:30:03
【问题描述】:
我有时需要静态调用子类方法的行为。
例如,我有一组messengers。我需要在每个实现中调用一次或两次,我不想保留它们的超级接口的变量,因为那时我需要为所有人提供一个方法描述,或者所有人都必须覆盖的几个方法描述。而且它们不会是静态的。
我希望能够做Messenger.MessageErrorMessage.send(param) 或Messenger.MessageDefaultMessage 之类的事情...需要将它们绑定到超类,但在调用子类方法时仍保持静态行为。
所以我在下面做了这个:
接口有公共的内部类,调用子类的静态方法,唯一的改变名称是MessageErrorMessages(实际子类)MessageErrorMessage(内部类)只需将名称从复数名称更改为单数名称。
Interface Messenger{
public static final class MessageErrorMessage{
public static void send(Message message){
MessageErrorMessages.send(Message);
}
}
public static final class MessageDefaultMessage{
public static void send(Message message){
MessageDefaultMessages.send(Message);
}
}
}
interface Messenger的实际实现..
MessageErrorsMessages implements Messenger {
public static void send(Message message){
//..Implementation of send
}
}
interface Messenger的实际实现..
MessageDefaultMessages implements Messenger{
public static void send(Message message){
//..Implementation of send
}
}
这样我就不必记住 20 种不同类型的 Messenger 子类并需要保留它们的变量。
这是否违反了任何设计规则?
编辑: 我希望能够写作
Messenger.MessageException.send(message, throwable);
同时
Messenger.MessageDefaultMessage.send(message);
我希望子类具有自己独特的行为和方法声明,但仍收集在 Messenger 下。
【问题讨论】:
-
我认为主要的设计缺陷是 Message 实现了 Messenger。您将信息(消息)与功能(信使)耦合。不使用 Messenger.sendMessage(message) 之类的原因是什么?
-
由于我想保持界面整洁,有几个内部类和长方法体,我仍然想将逻辑保留在单独的类中,
-
嗯,..你能提供一些关于不同消息类型的信息吗?您有什么样的发送(消息)行为?据我所知,主要目标是传输消息,我想不出关于如何传输或序列化消息的不同行为。如果您将 throwable 视为信息,您甚至可以使用 send(message) 而不是 send(message, throwable)...
-
当然,Messenger 静态方法被接收类和 DAOS 等调用,它们被用在不同的包中,例如 DAO 使用 messenger 只发送带有结果的消息,而接收类只在捕获到异常或 DAO 无法控制的其他情况时使用它。调度的每个作业都有自己的队列合同......所以我需要将所有代码分开,但在我需要请求其服务时收集......
标签: java inheritance interface subclass