我有时需要静态调用子类方法的行为。
在示例中,我有一组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);
}
}
}
接口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下收集。
答案 0 :(得分:1)
我不确定你要完成什么(我不确定我理解你的问题)但似乎你想基本上覆盖子类中的静态方法,这样你就可以调用方法了实例并将其委托给子类方法。这根本不可能。任何静态方法都将在您调用它们的类上调用(请注意,您在类上调用静态方法,不在实例上。如果您尝试调用一个类,则大多数编译器/ IDE都会发出警告实例上的静态方法,因为它可以模糊您实际调用它的类)。
答案 1 :(得分:0)
如果我理解正确,您希望能够使用*Messages
类中的静态方法,并且具有委派给相应Messenger
类的通用*Messages
类。除了你提出的方法之外,我不知道你怎么做。
那就是IMO,您应该在应用程序代码中使用Messenger
或*Messages
类。使用两者会导致混乱。