Java 是否可以将函数调用顺序存储在列表中?
我有一个类,它通过连续调用函数来构建字符串Java 是否可以将函数调用顺序存储在列表中?,java,Java,我有一个类,它通过连续调用函数来构建字符串 private String mString; addFoo(); addBar(); addBaz(); 但是,在RTL环境中,我需要反向构建字符串,即函数调用顺序应为: addBaz(); addBar(); addFoo(); 是否可以将此调用顺序存储在列表中,以便在RTL环境中反向遍历它?我试图避免重复流程,因为我知道它会完全颠倒过来。有比我想的更好的解决方案吗?您可以定义一个enum public enum FunctionCalls{
private String mString;
addFoo();
addBar();
addBaz();
但是,在RTL环境中,我需要反向构建字符串,即函数调用顺序应为:
addBaz();
addBar();
addFoo();
是否可以将此调用顺序存储在列表中,以便在RTL环境中反向遍历它?我试图避免重复流程,因为我知道它会完全颠倒过来。有比我想的更好的解决方案吗?您可以定义一个
enum
public enum FunctionCalls{
ADDFOO,ADDBAR,ADDBAZ;
}
然后定义一个列表
,然后向前或向后遍历该列表并切换
,其大小写为函数调用
switch(functionCall){
case ADDFOO: addFoo();
case ADDBAR: addBar();
case ADDBAZ: addBaz();
}
您可以定义
枚举
public enum FunctionCalls{
ADDFOO,ADDBAR,ADDBAZ;
}
然后定义一个列表
,然后向前或向后遍历该列表并切换
,其大小写为函数调用
switch(functionCall){
case ADDFOO: addFoo();
case ADDBAR: addBar();
case ADDBAZ: addBaz();
}
您可以定义一个接口,例如
public interface Action {
public void performAction();
}
并存储一个列表
。然后,以相反的顺序迭代列表。您还可以使用Deque
:首先按下操作,然后弹出它们,直到Deque为空。如果在反向执行操作后不需要跟踪操作,请选择该解决方案。否则,请使用LinkedList
以获得更好的性能
如果您使用Java8并且只有几个不同的操作,那么可以使用lambda表达式定义它们。例如:
Action a = () -> System.out.println("Hello world");
如果使用Java 7或更低版本,请使用匿名类:
Action a = new Action() {
@Override
public void performAction() {
System.out.println("Hello world");
}
}
您可以定义一个接口,例如
public interface Action {
public void performAction();
}
并存储一个列表
。然后,以相反的顺序迭代列表。您还可以使用Deque
:首先按下操作,然后弹出它们,直到Deque为空。如果在反向执行操作后不需要跟踪操作,请选择该解决方案。否则,请使用LinkedList
以获得更好的性能
如果您使用Java8并且只有几个不同的操作,那么可以使用lambda表达式定义它们。例如:
Action a = () -> System.out.println("Hello world");
如果使用Java 7或更低版本,请使用匿名类:
Action a = new Action() {
@Override
public void performAction() {
System.out.println("Hello world");
}
}
请注意,简单的单词反转将不起作用,因为有不同类型的格式和跨度应用于字符串。请注意,简单的单词反转将不起作用,因为有不同类型的格式和跨度应用于字符串。不太可重用和进化。如果他有一百个不同的动作要执行呢?然后将它们作为数字索引?Idk你可以在没有反射(对于用户应用来说不是很安全)或定义类似的东西的情况下完成这项工作。实际上,界面在这里要好得多,不是很容易重用和进化。如果他有一百个不同的动作要执行呢?然后将它们作为数字索引?Idk你可以在没有反射(对于用户应用来说不是很安全)或定义类似的东西的情况下完成这项工作。这里的界面实际上要好得多