gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:10:22 25 4
gpt4 key购买 nike

从这个上下文:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com