gpt4 book ai didi

java - 强制子类仅绑定(bind)到该子类的枚举

转载 作者:行者123 更新时间:2023-12-01 13:20:30 25 4
gpt4 key购买 nike

假设我有一个

abstract class Doctor{ }

我想强制执行此抽象类的任何扩展都必须绑定(bind)到医疗程序的显式列表 E extends Enum<E> & Procedures

同时,我需要绑定(bind)到专门用于扩展类的枚举。例如。我想要

class Neurosurgeon 
extends Doctor<E extends Enum<E> & Procedures<Neurosurgeon>{ }

同时,我希望枚举标记接口(interface)也绑定(bind)到 Doctor 的特定扩展名。宣布时。例如。

public enum NeurosurgeryProcedures implements Procedures<Neurosurgeon> { }

但不允许

public enum NeurosurgeryProcedures implements Procedures<Accounting> { }

换句话说,Procedures<? extends Doctor>

这会导致编译器无法解析的某种循环引用。有人对我如何执行这些要求有任何建议吗?

最佳答案

事实证明,使用正确的通用参数这是可能的。

定义医生如下:

abstract class Doctor<
D extends Doctor<D, P>,
P extends Enum<P> & Procedures<P, D>> {...}

为特定医生定义enum标记程序,如下所示:

interface Procedures<
P extends Enum<P> & Procedures<P, D>,
D extends Doctor<D, P>> {...}

然后,Doctor 的子类将需要为该子类指定一组特定的过程。因此,神经外科医生的 child 类(class),

class Neurosurgeon extends
Doctor<Neurosurgeon, NeurosurgeryProcedures> {...}

需要针对该类型医生的神经外科手术:

enum NeurosurgeryProcedures
implements Procedures<NeurosurgeryProcedures, Neurosurgeon> {...}

我认为这正确地将子类定义与特定于该子类的枚举联系起来。

关于java - 强制子类仅绑定(bind)到该子类的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com