에서 인터페이스를 구현하는 열거 참조하십시오 :어떻게 이런 맥락에서 제네릭 클래스
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 implements Traits
으로 Base<E>
에 E
를 선언함으로써 캐스트를 피하는 소원을하지만 사용하는 구문을 알려져 있지 않습니다.
'E는 열거를 확장 :
여러 범위 (열거와 인터페이스 모두의 하위 유형)을 가지려면 : 그래서 당신은 다음을 수행 할 수있는 인터페이스의 하위 유형으로 유형 매개 변수를 선언합니다 & Intrfc'. –