如何创建可接收不同枚举类型的泛型抽象方法?
解决方案:让抽象方法支持不同枚举类型参数
要实现让抽象方法doSomething()接收不同枚举类型,你需要通过泛型限定约束抽象类的方法参数,同时确保子类能指定具体的枚举类型。具体修改步骤如下:
- 定义公共接口(可选但推荐)
为了让所有目标枚举能被统一调用createSomething()方法,先定义一个接口来规范这个行为:
public interface Creatable { void createSomething(); }
让你的所有枚举类实现这个接口:
public enum Enum1 implements Creatable { // 你的枚举常量 VALUE1, VALUE2; @Override public void createSomething() { // 实现具体逻辑 } } // Enum2、Enum3等同样实现Creatable接口
- 修改抽象类为泛型类
将NumberOne改为泛型类,泛型参数限定为枚举类型且实现Creatable接口,同时调整抽象方法的参数:
public abstract class NumberOne<T extends Enum<T> & Creatable> { public abstract void doSomething(T enumInstance); }
这里的泛型限定T extends Enum<T> & Creatable确保了T必须是枚举,同时具备createSomething()方法。
- 修改子类实现
子类NumberTwo继承时指定具体的枚举类型Enum1,并重写方法:
public class NumberTwo extends NumberOne<Enum1> { @Override public void doSomething(Enum1 enum1) { enum1.createSomething(); } }
如果不需要统一调用createSomething(),只是想接收任意枚举,可以简化抽象类的泛型限定为T extends Enum<T>,但这样在抽象方法中无法直接调用枚举的自定义方法,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者javabeginer
相关产品推荐
相关产品推荐

