java undo()
时间: 2023-10-09 15:12:07 浏览: 48
`undo()` 方法是用于撤销上一次操作的方法,通常用于实现“撤销”功能。在 Java 中,实现撤销功能的方式有很多种,这里提供一种常见的方式:
1. 定义一个接口 `Command`,该接口包含两个方法:`execute()` 和 `undo()`。
```java
public interface Command {
void execute();
void undo();
}
```
2. 实现具体的操作类,这些类实现 `Command` 接口,并实现 `execute()` 和 `undo()` 方法。
```java
public class AddCommand implements Command {
private final List<Integer> list;
private final int num;
public AddCommand(List<Integer> list, int num) {
this.list = list;
this.num = num;
}
@Override
public void execute() {
list.add(num);
}
@Override
public void undo() {
list.remove(list.size() - 1);
}
}
public class RemoveCommand implements Command {
private final List<Integer> list;
private final int index;
private int num;
public RemoveCommand(List<Integer> list, int index) {
this.list = list;
this.index = index;
}
@Override
public void execute() {
num = list.remove(index);
}
@Override
public void undo() {
list.add(index, num);
}
}
```
3. 创建一个 `CommandManager` 类,用于管理所有的操作。
```java
public class CommandManager {
private final List<Command> commands = new ArrayList<>();
private int currentIndex = -1;
public void executeCommand(Command command) {
command.execute();
currentIndex++;
if (currentIndex < commands.size()) {
commands.subList(currentIndex, commands.size()).clear();
}
commands.add(command);
}
public boolean canUndo() {
return currentIndex >= 0;
}
public void undo() {
if (canUndo()) {
Command command = commands.get(currentIndex);
command.undo();
currentIndex--;
}
}
}
```
4. 使用 `CommandManager` 类实现撤销功能。
```java
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
CommandManager manager = new CommandManager();
manager.executeCommand(new AddCommand(list, 1));
manager.executeCommand(new AddCommand(list, 2));
manager.executeCommand(new AddCommand(list, 3));
System.out.println(list); // [1, 2, 3]
if (manager.canUndo()) {
manager.undo();
}
System.out.println(list); // [1, 2]
}
```
在上面的代码中,我们首先创建了一个 `CommandManager` 对象 `manager`,然后依次执行了三个操作:添加数字 1、2、3。执行完操作后,我们输出了列表 `list` 的内容,可以看到列表中包含了数字 1、2、3。
接着,我们判断 `manager` 是否可以执行撤销操作,如果可以,就执行一次撤销操作。然后再次输出列表 `list` 的内容,可以看到列表中只剩下了数字 1、2,数字 3 已经被撤销了。
以上就是一种实现 Java 撤销功能的方式。当然,具体实现方式可能因应用场景而异。