【问题标题】:How to create a generic type that only allow a specific class to extends/implements it如何创建只允许特定类扩展/实现它的泛型类型
【发布时间】:2020-07-16 04:51:36
【问题描述】:

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

【问题讨论】:

    标签: java inheritance generic-programming


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多