如何从 Java 堆栈中提取信息作为单独的数据类型并在方法调用中使用

How to extract information from Java stack as individual data types and use in method call

我正在尝试通过创建 2 个子类型的堆栈来实现撤消功能。 我有一堆父类型 UserEntry,其中包含两个子类型 Assign 和 RelEntry。 Assign 和 RelEntry 都是 classes,用于将值(数字和关系)插入网格 table。 有一个方法调用可以将值插入 table 作为它们各自的子类型,例如 assignToTable()RelEntryToTable()。 我正在尝试使用可以从父堆栈调用这两种子类型的多态方法,例如。

parentStack.assignAndRelEntryToTable();

在为 UserEntry 制作摘要 class 时,我尝试了一个 addToPuzzle() 方法,然后我在两个子 classes 中实现了该方法,但是在尝试使用

调用时
for (UserEntry ue : stack){
    puzzle.addToPuzzle(ue)
}

方法调用需要每个子class特定的方法。我已经尝试为每个 subclass 创建一个方法调用,但无法从 sub-classes.

引用拼图本身

这里有 4 个 classes 协同工作:UI、RelEntry、UserEntry 和 Assign。 我正在尝试为 UI class 中的每个循环创建它们,因为它包含拼图变量。

我很难完全理解您的要求,所以我会非常笼统。

语法可能不是 100% 正确,但它应该给出了大概的意思。

public abstract class UserEntry{

   abstract void somCommonMethod();
}

public class RelEntry extends UserEntry{

   void someCommonMethod(){
      //ownRelEntryLogic
   }
}

public class Assign extends UserEntry{

   void someCommonMethod(){
      //ownAssignLogic
   }
}

public Puzzle{

    ArrayDeque<UserEntry> stack = new ArrayDeque<>();

    public void undoLogic(){

        stack.pop().someCommonMethod();

    }

    public void add(UserEntry anyInstanceOfUserEntry){

        stack.push(anyInstanceOfUserEntry);

    }


    } 

}
public class UI{

    Puzzle p = new Puzzle();

    p.add(new RelEntry());
    p.add(new Assign());

}

如果我没有正确理解你的问题,你正在寻找 instanceof。它让您检查对象是否属于给定类型。使用它,您可以确定 UserEntry 的子类型,转换为所需的子类型并相应地调用您的方法之一。像这样:

for (UserEntry ue : stack){
    if(ue instanceof Assign){
        Assign assign = (Assign) ue;
        puzzle.assignToTable(assign );
    } else if(ue instanceof RelEntry){
        RelEntry relEntry = (RelEntry) ue;
        puzzle.relEntryToTable(relEntry);
    }
}