Java Enum作为Enum中的泛型类型

我正在尝试在一个抽象类中创建一个抽象方法,该抽象类将自己的Enum作为参数。但是我也希望枚举是通用的。

所以我这样宣布:

public abstract <T extends Enum<T>> void test(Enum<T> command);

在实现中,我列举了一个枚举:

public enum PerspectiveCommands {

PERSPECTIVE

}

并且方法声明变为:

@Override

public <PerspectiveCommands extends Enum<PerspectiveCommands>> void test(Enum<PerspectiveCommands> command) {

}

但是,如果我这样做:

@Override

public <PerspectiveCommands extends Enum<PerspectiveCommands>> void test(Enum<PerspectiveCommands> command) {

if(command == PerspectiveCommands.PERSPECTIVE){

//do something

}

}

我无法访问PerspectiveCommands.PERSPECTIVE并显示错误消息:

cannot find symbol symbol: variable PERSPECTIVE   location: class Enum<PerspectiveCommands> where PerspectiveCommands is a type-variable: PerspectiveCommands extends Enum<PerspectiveCommands> declared in method <PerspectiveCommands>test(Enum<PerspectiveCommands>)

我做了这样的解决方法:

public <T extends Enum<T>> byte[] executeCommand(Enum<T> command) throws Exception{

return executeCommand(command.name());

}

@Override

protected byte[] executeCommand(String e) throws Exception{

switch(PerspectiveCommands.valueOf(e)){

case PERSPECTIVE:

return executeCommand(getPerspectiveCommandArray());

default:

return null;

}

}

但是我想知道是否有可能无法通过我的解决方法?

回答:

在您的方法实现PerspectiveCommands中,不是枚举,而是类型参数(通常称为)T。因此,它掩盖了与已经说过的axtavt相同名称的枚举,因此PERSPECTIVE在此未知。

您的抽象方法声明很好,但是您可以使用稍微不同的方法。

public void test(PerspectiveCommands

command)将不起作用,因为此方法不会覆盖通用版本。原因是使用通用版本时,可从参数中推断类型,因此您可以传递任何枚举。

但是,我假设您有一个定义抽象方法的接口或抽象类。所以尝试这样的事情:

interface TestInterface<T extends Enum<T>>

{

public abstract void test(T command);

}

class TestImpl implements TestInterface<PerspectiveCommands>

{

@Override

public void test(PerspectiveCommands command) {

if(command == PerspectiveCommands.PERSPECTIVE){

//do something

}

}

}

以上是 Java Enum作为Enum中的泛型类型 的全部内容, 来源链接: utcz.com/qa/417125.html

回到顶部