You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含泛型的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 04:15:07