如何将含泛型的Java类转换为Node.js环境下的TypeScript代码
泛型相关内容讲解
核心概念
- 泛型本质是类型参数化,可以理解为给类/方法/容器留一个类型占位符,定义阶段不写死具体类型,使用时再传入指定类型,既可以复用代码逻辑,又能在编译阶段做类型检查,避免运行时类型错误。
- 你代码里用到的
List<EditorState>就是Java泛型的典型用法:<EditorState>指定了List容器只能存储EditorState类型的元素,插入其他类型的对象会直接触发编译报错。 - TypeScript的泛型逻辑和Java完全一致,仅语法写法略有区别:Java里的
List<T>对应TS里的Array<T>(也可以简写为T[],两种写法等价)。
转换后的TypeScript代码
注:原Java代码History类的push方法存在笔误,
state.add(state)应为states.add(state),转换代码已修正该问题。
基础版(完全对齐原Java逻辑)
class EditorState { // 对应Java的private final修饰符 private readonly content: string; constructor(content: string) { this.content = content; } public getContent(): string { return this.content; } } class History { // Array<EditorState>就是TS泛型写法,等价于Java的List<EditorState>,也可以写为EditorState[] private states: Array<EditorState> = []; public push(state: EditorState): void { this.states.push(state); } // 补充备忘录模式常用的pop方法,用于回退状态 public pop(): EditorState | undefined { return this.states.pop(); } }
泛型复用版(扩展通用能力)
如果希望History类可以复用给其他类型的状态存储,可以用泛型实现通用容器,和Java的泛型类写法逻辑一致:
// T是类型参数,使用时传入具体类型即可 class GenericHistory<T> { private states: T[] = []; public push(state: T): void { this.states.push(state); } public pop(): T | undefined { return this.states.pop(); } } // 使用时指定类型为EditorState,功能和上面的非泛型History完全一致 const editorHistory = new GenericHistory<EditorState>(); // 此时TS会自动校验:editorHistory.push只能传入EditorState类型的参数,类型安全和Java一致
内容的提问来源于stack exchange,提问作者Mohsen
相关产品推荐
相关产品推荐

