我绞尽脑汁试图找到一种简单的方法来强制子类声明另一种类型的子类.比如,我有
public final class MessageType1 extends MessageType {
public static final class Subtypes extends MessageSubtypes {
public static int SOME_SUBTYPE = 1;
}
}
public final class MessageType2 extends MessageType {
public static final class Subtypes extends MessageSubtypes {
public static int ANOTHER_SUBTYPE = 1;
}
}
public abstract class MessageType {
public static abstract class MessageSubtypes {
public static int ALL_SUBTYPES = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确保MessageType的每个子节点都必须创建自己的MessageSubtypes版本并将其命名为Subtypes?
或者也许我在错误的圈子中旋转,有更好的方法来做到这一点.基本上我只是想确保我的所有消息类型都有自己的一组唯一子类型,并且每个子类型都有一个名为ALL的成员,其值为0.创建没有子类型的MessageType不应该编译,但如果不可能它应该至少不可用,如果发生则抛出异常.
如何强制子类声明特定的内部类?
你不能.
您可以做的最多是声明abstract子类型必须实现的方法.在您的情况下,您可以声明一个方法abstract Set<MessageSubtype> getSubtypes().
请注意,我将名称更改为单数.而且,对于子类型而言,使用a而enum不是a 几乎肯定会更好class,因为枚举是表示在编译时已知的固定值类型值的最佳方式.
基本上我只是想确保我的所有消息类型都有自己的一组唯一子类型,并且每个子类型都有一个名为ALL的成员,其值为0.创建没有子类型的MessageType不应该编译,但如果不可能它应该至少不可用,如果发生则抛出异常.
您对实现过多考虑,而对代码公开的API则不够.我认为几乎每个中级Java程序员都试图在某些时候做这样的事情(我当然有!).考虑提供一个用于代码消费者的界面.
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |