java - 如何引用实现泛型类接口(interface)的枚举

标签 java enums

从这个上下文:

enum Traits {
   TA,
   TB
}

interface Intrfc {
   Traits getTraits();
}

// How to add some precision about E which implements Traits?
abstract class Base<E extends Enum<E>> {

   void func( E e ) {
      final Traits t = ((Intrfc)e).getTraits(); //<<<<< To avoid this cast?
   }
}

enum X implements Intrfc {
   A( Traits.TA ),
   B( Traits.TA ),
   C( Traits.TB ),
   ;
   private Traits traits;

   X( Traits t ) {
      traits = t;
   }

   @Override
   public Traits getTraits() {
      return traits;
   }
}

class Concrete extends Base<X> {

   void f() {
      func( X.B );
   }
}

我希望通过声明 E 来避免转换在Base<E>E implements Traits但我不知道要使用的语法。

最佳答案

泛型上下文中的extends 关键字可以表示普通的extendsimplements 含义。因此,要将类型参数声明为接口(interface)的子类型,您可以执行以下操作:

abstract class Base<E extends Intrfc> {

要有多个边界(枚举和接口(interface)的子类型):

abstract class Base<E extends Enum<E> & Intrfc> {

关于java - 如何引用实现泛型类接口(interface)的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706818/

相关文章:

java - 如何在 SQLite3 和 Java 中找到接下来要使用的 ID?

java - 如何针对特定列过滤 JTable?

swift - 有没有办法定义一个幂为 2(或计算值)的快速枚举

javascript - 遍历枚举,将枚举元素指定为参数

swift - 在 Swift 3 中从数据初始化结构

java - Camel 路线创建错误,未找到方案 : mongodb 的组件

java - 使用 mapreduce 的第二大薪水 - 输出不符合预期

java - JVMTI Agent_OnLoad 处理程序无法创建系统属性

swift - 无法从枚举中获取原始字符串

swift - 我应该如何使用 Swift 枚举实现默认关联值?