0

我用 Java 写了一个文本编辑器,我想给它添加 Undo 功能

但是没有 UndoManager 类,我需要使用 Stack 或 LinkedList 之类的数据结构,但 Java 中的 Stack 类使用 Object 参数,例如: push(Object o) , Not Push(String s) 我需要一些提示或链接。谢谢

4

4 回答 4

7

假设您使用的是 Java 5,Stack 是一个泛型类。你可以根据它应该持有的对象来实例化它。

然后你可以使用:

Stack<String> stack = new Stack<String>();
String string = "someString";
stack.push(string);

另请注意,在您使用 Java 1.4 或更低版本的情况下,您仍然可以将 String 对象推送到堆栈中。只有当您将它们 pop() 出来时,您需要显式地向下转换它们,如下所示:

Stack stack = new Stack();
String string = "someString";
stack.push(string);

String popString = (String) stack.pop(); // pop() returns an Object which needs to be downcasted
于 2008-11-28T11:56:54.477 回答
3

实际上是一种模式的“数据结构”称为Memento。当您需要存储多个状态并可以选择返回到以前的状态时,它会很有帮助。对于状态的有效数据存储取决于您正在使用哪种文本编辑器,如果可以进行一些格式化,请查看Flyweight模式。

于 2008-11-28T11:59:23.910 回答
1

嗯……

对我来说似乎有点像 RTFM 的情况 ;-)

如果您使用的是 Java 1.4.2,则只需在从堆栈中获取对象时显式转换对象即可:

Command cmd = (Command) stack.pop(); // same for peek() etc.

如果您使用的是 Java 1.5,请使用泛型,并且不需要显式转换。

于 2008-11-28T12:02:56.773 回答
0

好的,我解决了

我必须按 textArea 中的文本而不是键盘上的字符

多谢你们

于 2008-11-28T12:34:25.133 回答