有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将类类型存储为变量,以标识java中列表中的下一个预期对象类型

我正在做一个项目,在这个项目中,我获得了一个字符串列表,需要将它们解析为不同类型的对象,例如,我有CommandFloatArgumentIntegerArgument作为3个不同的类。对于“fetch 5 3.45”这样的给定输入,我需要查看它是否正确,然后获取参数。为此,我决定创建一种库,其中所有命令都可以存储在一个哈希列表中

baseCommands = new HashMap<String, Command>();

在command类中,我存储了每个命令所需的基本信息,我还想包括下一个预期的标记,因为现在我非常确定每个命令只有一种类型的标记,可以跟在任何命令/参数后面。因此,我在命令类以及存储此信息的参数类中创建了一个Class字段:

public class Command {
    public int identifier;
    public Class next;
    public boolean isLast;

    public Command(int identifier, Class next, boolean isLast) {
        //add the stuff neccesary to make general commands. (except string name).
        this.identifier = identifier;
        this.next = next;
        this.isLast = isLast;
    }
}

按照我的理解,通常情况下,如果你想使用一个抽象类来存储不同的类类型,如果它们都是相似的。例如,抽象类Animal被DogCat等扩展。然而,在本例中,我有两个独立的东西:命令和参数。我觉得拥有一个空的抽象类可能不是这里最优雅的解决方案,但我可能错了

据我所知,Class字段用于存储类类型。这将非常理想,以便稍后我可以通过简单地执行以下操作,查看输入中给定的令牌后的下一个令牌是否与预期的匹配:

token.type instanceof lastToken.next

然而,一旦我尝试像这样将信息放入hashmap中:

baseCommands.put("execute", new Command(1, Command, false));

我得到以下简单错误:

Command cannot be resolved to a variable

现在我知道它要做的是传递一个不存在的变量,而不是像我尝试的那样传递类类型。如何将class命令作为类型传递?我能否使用上述方法检查输入中的下一个令牌是否正确?这是一种正确的方法,还是应该为命令和参数创建另一个抽象类

谢谢你的意见


共 (1) 个答案

  1. # 1 楼答案

    你必须参考命令。课程:

    baseCommands.put("execute", new Command(1, Command.class, false));