有没有HarmonyOS鸿蒙Next工程师大佬路过,复习泛型继承的类没搞明白

有没有HarmonyOS鸿蒙Next工程师大佬路过,复习泛型继承的类没搞明白 cke_469.png

这个是我在CodeGenie中询问得来的代码,但我并没有看的太懂,求大佬帮帮忙

// 基础类定义
class Base {
  id: number = 0
}

// 泛型约束接口
interface DataConstraint {
  value: string
}

// 泛型类继承示例
class GenericClass<T extends DataConstraint> extends Base {
  data: T

  constructor(data: T) {
    super()
    this.data = data
  }

  display(): void {
    console.log(`ID:${this.id}, Data:${this.data.value}`)
  }
}

// 使用示例
class ValidData implements DataConstraint {
  value: string = "Default"
}

const instance = new GenericClass(new ValidData())
instance.display() // 输出: ID:0, Data:Default

更多关于有没有HarmonyOS鸿蒙Next工程师大佬路过,复习泛型继承的类没搞明白的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

**有劳补全问题描述,**让用户更清晰了解您的问题。

就所给的信息来看,ValidData是声明自接口DataConstraint的实例类,GenericClass是继承自Base基类的类,所以GenericClass的属性Id会继承自Base类,Id的值和在初始化时传入的值有关;new一个ValidData数据,并没有传入新的数据去初始化ValidData的属性data,data保持默认,这也就为什么最后输出Data是Default。

更多关于有没有HarmonyOS鸿蒙Next工程师大佬路过,复习泛型继承的类没搞明白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


泛型继承的类使用涉及类型约束和继承关系结合

类与接口定义:

class Base {

  id: number = 0 // 所有子类将继承该字段

}

interface DataConstraint {

  value: string // 定义必须包含value字符串字段的接口

Base类提供基础属性id;DataConstraint接口强制实现类必须包含value字段

泛型类实现继承与约束:

class GenericClass<T extends DataConstraint> extends Base {

  data: T // 泛型字段必须符合接口约束

  constructor(data: T) {

    super() // 调用父类构造函数初始化id

    this.data = data

  }

  display(): void {

    console.log(`ID:${this.id}, Data:${this.data.value}`)

  }

}

<T extends DataConstraint>:泛型参数必须实现指定接口;extends Base:继承父类的id字段和方法;构造函数通过super()初始化父类属性

具体实现与调用

class ValidData implements DataConstraint {

  value: string = "Default" // 符合接口约束

}

const instance = new GenericClass(new ValidData())

instance.display() // 输出父类id + 泛型对象value

这样是不是就清楚了?

// 使用示例
class ValidData implements DataConstraint {
  value: string = "Default"
}

class ValidData2 implements DataConstraint {
  value: string = "使用示例2"
}

class ValidData3 implements DataConstraint {
  value: string = "使用示例3"
}

const instance = new GenericClass(new ValidData())
instance.display() // 输出: ID:0, Data:Default

const instance2 = new GenericClass(new ValidData2())
instance2.display() // 输出: ID:0, Data:使用示例2

const instance3 = new GenericClass(new ValidData3())
instance3.display() // 输出: ID:0, Data:使用示例3

在HarmonyOS Next中,泛型继承通过类型参数化实现代码复用与类型安全。子类继承父类时,可指定具体类型参数或传递泛型参数。例如,class Child<T> extends Parent<T> 允许子类使用与父类相同的泛型类型。若需约束类型,可使用extends关键字,如<T extends SomeType>。这确保了类型兼容性,同时保持了代码的灵活性。

这段代码展示了ArkTS/TypeScript中泛型类继承的典型用法,核心是通过泛型约束实现类型安全的继承结构

关键点解析:

  1. 泛型约束<T extends DataConstraint> 表示泛型参数T必须是实现了DataConstraint接口的类型,确保了this.data.value的访问是合法的。

  2. 继承链GenericClass同时实现了:

    • 类继承:继承Base类,获得id属性
    • 泛型约束:要求类型参数满足DataConstraint接口
  3. 类型安全:构造函数接收T类型参数,赋值给data属性。由于T被约束为必须有value属性,display()方法中访问this.data.value是类型安全的。

执行流程:

  • ValidData实现了DataConstraint接口
  • 创建GenericClass<ValidData>实例时,泛型T被推断为ValidData
  • 实例同时拥有Base.idValidData.value的访问能力

这种模式在HarmonyOS Next开发中常用于构建可复用的组件基类,既能保证类型安全,又能通过继承扩展功能。

回到顶部