【发布时间】:2020-07-16 04:51:36
【问题描述】:
例如,我想创建一个通用接口IEnum,并确保每个IEnum实例也是一个枚举常量,也就是说,只有枚举类型才能实现IEnum。 java是否支持这样的特性或者可以通过任何变通方法来实现?可以通过递归有界类型参数来实现吗?
【问题讨论】:
标签: java inheritance generic-programming
例如,我想创建一个通用接口IEnum,并确保每个IEnum实例也是一个枚举常量,也就是说,只有枚举类型才能实现IEnum。 java是否支持这样的特性或者可以通过任何变通方法来实现?可以通过递归有界类型参数来实现吗?
【问题讨论】:
标签: java inheritance generic-programming
您可以使用递归有界和联合类型参数来强制传递的泛型类是Enum 并实现IEnum:
public interface IEnum<E extends Enum<E> & IEnum<E>> {}
注意:顺序很重要,所以第一个类型可以是类或接口,但它后面的所有内容都必须是接口。
然后你可以像这样使用它:
public enum Foo implements IEnum<Foo> {}
遗憾的是,您不能强制实现类将自身作为类型参数传递,例如这会起作用:
public class Bar implements IEnum<Foo> {}
您也不能将实现限制为不使用原始类型,例如这也可以:
public class Baz implements IEnum {}
【讨论】: