我有时需要静态调用子类方法的行为。
例如,我有一组 messengers
。我需要在每个实现中调用一次或两次,我不想保留它们的 super 接口(interface)的变量,因为那时我需要为所有方法描述一个方法,或者所有方法都必须覆盖几个方法描述。而且它们不会是静态的。
我希望能够执行类似Messenger.MessageErrorMessage.send(param)
或Messenger.MessageDefaultMessage
等操作...需要将它们绑定(bind)到父类(super class), 但在调用子类方法时仍然保持静态行为。
所以我在下面做了这个:
该接口(interface)具有调用子类静态方法的公共(public)内部类,名称唯一的变化是 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);
}
}
}
Messenger 界面的实际实现..
MessageErrorsMessages implements Messenger {
public static void send(Message message){
//..Implementation of send
}
}
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 下。
最佳答案
我不确定你想要完成什么(我不确定我是否理解你的问题)但你似乎想基本上覆盖子类中的静态方法,这样你就可以调用实例上的方法并拥有它委托(delegate)给子类方法。这根本不可能。任何静态方法都将在您调用它们的类上调用(请注意,您是在类上调用静态方法,不是在实例上。如果您尝试调用一个类,大多数编译器/IDE 会发出警告实例上的静态方法,因为这可能会掩盖您实际调用它的类)。
关于java - 用静态方法调用子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291097/