HarmonyOS 鸿蒙Next 怎么使用泛型T类型

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 怎么使用泛型T类型

import 'reflect-metadata'
function query<T>(key:string){
    return Reflect.getMetadata(key, T); //错误:'T' only refers to a type, but is being used as a value here. 
}

请问这个方法具体该怎么写?

6 回复

使用泛型函数可编写更通用的代码。比如返回数组最后一个元素的函数:

深色代码主题
复制
function last(x: number[]): number {
return x[x.length - 1];
}
last([1, 2, 3]); // 3

如果需要为任何数组定义相同的函数,使用类型参数将该函数定义为泛型:

深色代码主题
复制
function last<T>(x: T[]): T {
return x[x.length - 1];
}

现在,该函数可以与任何数组一起使用。

在函数调用中,类型实参可以显式或隐式设置:

深色代码主题
复制
// 显式设置的类型实参
last<string>(['aa', 'bb']);
last<number>([1, 2, 3]);

// 隐式设置的类型实参 // 编译器根据调用参数的类型来确定类型实参 last([1, 2, 3]);

具体参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/introduction-to-arkts-V5#泛型函数

更多关于HarmonyOS 鸿蒙Next 怎么使用泛型T类型的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不好意思,可能是我的有误:

import 'reflect-metadata'

深色代码主题
复制
function query<T>(key:string):string{
  return Reflect.getMetadata(key, T) as string; //这一句报错 :'T' only refers to a type, but is being used as a value here. 
}

我的目的是想通过泛型的方式,获取指定类中的元数据,但是这里泛型T被告知它只是一个类型的引用。所以想知道这种情况下,该泛型方法有没有什么正确的写法。

getMetadata(metadataKey: any, target: Object),这个方法参数是个Object,T和string,number 都是个type,所以报错。 尝试写了下,是不支持的,arkts的反射暂时做不到这个。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

1、首先你写的方法是无返回值类型方法,不能写return xxx
2、你可以按照下面的方式写:
深色代码主题
复制
query<T>(key: string):T | null {

let value: T | null = ‘这里换成你的代码获取到的值’; return value; }




 

在HarmonyOS鸿蒙Next中,使用泛型T类型主要依赖于鸿蒙提供的泛型编程支持。泛型允许你在编写代码时定义类、接口或方法时不具体指定数据类型,而是在使用时指定。这增强了代码的重用性和类型安全性。

要在鸿蒙中使用泛型T类型,可以按照以下步骤进行:

  1. 定义泛型类: 在类定义中使用<T>来指定泛型类型参数。例如,定义一个泛型类Box<T>

    // 注意:此代码为示例,鸿蒙实际代码不基于Java
    class Box<T> {
        private T content;
        public void setContent(T content) {
            this.content = content;
        }
        public T getContent() {
            return content;
        }
    }
    
  2. 使用泛型类: 在创建泛型类的实例时,通过尖括号指定具体的数据类型。例如:

    // 注意:此代码为示例,鸿蒙实际代码不基于Java
    Box<Integer> intBox = new Box<>();
    intBox.setContent(123);
    Integer value = intBox.getContent();
    
  3. 泛型方法: 类似地,可以定义泛型方法,方法定义中包含<T>,并在方法体内使用T类型。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部