Java 强制子类仅绑定到该子类的枚举
假设我有一个Java 强制子类仅绑定到该子类的枚举,java,generics,enums,Java,Generics,Enums,假设我有一个 abstract class Doctor{ } 我希望强制将此抽象类的任何扩展绑定到医疗过程的显式列表E extends Enum&procedures 同时,我需要绑定到专门用于扩展类的枚举。我想要 class Neurosurgeon extends Doctor<E extends Enum<E> & Procedures<Neurosurgeon>{ } 但不允许 public enum NeurosurgeryProc
abstract class Doctor{ }
我希望强制将此抽象类的任何扩展绑定到医疗过程的显式列表E extends Enum&procedures
同时,我需要绑定到专门用于扩展类的枚举。我想要
class Neurosurgeon
extends Doctor<E extends Enum<E> & Procedures<Neurosurgeon>{ }
但不允许
public enum NeurosurgeryProcedures implements Procedures<Accounting> { }
public enum神经外科程序实现程序{}
换句话说,
过程证明,使用正确的通用参数是可能的
对医生的定义如下:
abstract class Doctor<
D extends Doctor<D, P>,
P extends Enum<P> & Procedures<P, D>> {...}
interface Procedures<
P extends Enum<P> & Procedures<P, D>,
D extends Doctor<D, P>> {...}
然后,需要一个子类Doctor
,为该子类指定一组特定的过程。因此,一个神经外科医生的儿童班
class Neurosurgeon extends
Doctor<Neurosurgeon, NeurosurgeryProcedures> {...}
class神经外科医生
医生{…}
需要特定于该类型医生的神经外科手术程序:
enum NeurosurgeryProcedures
implements Procedures<NeurosurgeryProcedures, Neurosurgeon> {...}
enum神经外科程序
实现过程{…}
我认为这将子类定义与特定于该子类的枚举恰当地联系起来。您能解释/演示为什么需要循环引用吗?@paulBellora基本上,对于每个子类,都应该有一个专门用于该子类的枚举的关联列表,我想确保只有那些人是相互联系的;两个并行类型层次结构应该有一对一的对应关系。我理解这一点,但我试图弄清楚为什么需要这样做。例如,为什么不仅仅是神经外科医生扩展医生
和神经外科程序
实施程序
(非通用)?请考虑显示一些依赖于双向泛型关系的示例实现代码。@ PaulBellora,因为没有什么可以阻止某人定义<代码>神经外科程序< /代码>枚举,实现其他一些程序集。我想在申请书的另一部分,研究各种各样的程序,包括医疗和非医疗,但希望在这些定义中限制对医生相关程序的约束。。。这有意义吗…?anishthecoder的答案很聪明。但它可能不允许神经外科医生进行全科医生的手术。您可能需要构造函数获取枚举类的列表。您可以通过标记接口键入不同的枚举,这样记帐就不会潜入。
enum NeurosurgeryProcedures
implements Procedures<NeurosurgeryProcedures, Neurosurgeon> {...}