【发布时间】:2014-06-30 03:29:36
【问题描述】:
好的,我目前正在定义通用枚举参数,如下所示:
public interface MyInterface
{
public int GetValue ( );
}
public enum MyEnum implements MyInterface
{
value1(1), value2(2);
int myvalue;
MyEnum ( int value )
{
this.myvalue = value;
}
public int GetValue ( )
{
return this.myvalue;
}
}
public class PassGeneric
{
public void AcceptsGeneric ( Enum<? extends MyInterface> generic_enum )
{
generic_enum.values(); // Not valid
generic_enum.GetValue(); // Not valid
generic_enum.getDeclaringClass().getEnumConstants(); // Valid
((Enum<?>)generic_enum).values(); // Not Valid
((MyInterface)generic_enum).GetValue(); // Valid
}
}
我只是想了解为什么类型说明符 Enum<? extends MyInterface> 不允许我 1) 直接访问 MyInterface 方法,以及 2) 直接访问 Enum 方法,例如 .values()。
强制转换适用于访问MyInterface 方法,但对我来说,指定泛型类型扩展MyInterface 的目的是失败的,因为将Enum<? extends MyInterface> 替换为Enum<?> 并将对象强制转换为@987654329 仍然是合法的@。
如果我误解了泛型的使用和实现extends,有人可以向我解释如何正确地明确指定泛型实现给定接口。
【问题讨论】:
-
你有什么理由只使用
MyInterface作为参数吗? -
因为我也想访问
.values()等枚举方法
标签: java generics interface enums