Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 强制子类仅绑定到该子类的枚举_Java_Generics_Enums - Fatal编程技术网

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> {...}