从这个上下文:
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
关键字可以表示普通的extends
或implements
含义。因此,要将类型参数声明为接口(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/