如何从 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);
}
}
我正在尝试通过创建 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);
}
}