我正在尝试拥有一组扩展通用接口的枚举,例如:
interface Fooable
{
void someCommonMethod();
}
enum E1 implements Fooable
{
// some enumuerations and a definition for someCommonMethod()
}
enum E2 implements Fooable
{
// some different enumerations and a different definition for someCommonMethod()
}
然后通过强制变量是枚举并实现接口来在其他地方使用它。所以有点类似..
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
fe.someCommonMethod();
}
但是,到目前为止,我似乎必须强制转换 fe 才能将其视为实现接口,即
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
((Fooable)fe).someCommonMethod();
}
虽然这应该是安全的......它似乎不是最理想的,我可能会忽略一些东西。当然,如果我尝试仅将参数作为 Fooable 传递,那么我最终将其转换为将其视为枚举,这不仅没有收获,我现在甚至都不安全。请参阅以下内容:
bar(Fooable fe)
{
// potentially unsafe cast!
((Enum<?>)fe).ordinal();
fe.someCommonMethod();
}
有什么我忽略的或者是
Enum<? extends Fooable>
与我得到的“好”解决方案一样接近吗?
我对 Java 比较陌生,并且仍然在尝试像 C 或 C++ 一样使用它,所以如果我把它当作锤子而不是锯子来对待,或者忽略一些愚蠢简单的东西,请随时指出:)