如何创建只允许特定类扩展/实现它的泛型类型



例如,我想创建一个通用接口IEnum,并确保每个IEnum实例也是枚举常量,换句话说,只有枚举类型才能实现IEnum。java支持这样的功能吗?或者可以通过任何变通方法来实现吗它可以通过递归的有界类型参数来实现吗

您可以使用递归有界和并集类型参数来强制传递的泛型类是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 {}

最新更新