例如,我想创建一个通用接口IEnum,并确保每个枚举实例也是一个枚举常量,换句话说,只有枚举类型可以实现IEnum。java是否支持这样的特性,或者是否可以通过任何变通方法来实现?它可以通过递归的有界类型参数来实现吗?
发布于 2020-07-16 12:57:13
您可以使用递归有界类型参数和联合类型参数来强制传递的泛型类是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 {}https://stackoverflow.com/questions/62927673
复制相似问题