关于泛型:TypeScript之泛型

根底阐明如果咱们须要定义一个函数,一个入参和一个返回值,入参和返回值类型须要保持一致,怎么办? 比方规定类型都是字符串,那么: function doit(arg: string): string { return arg;}能够看进去,类型这里写死成string了,那类型可不可以像参数一样定义成变量传递进来?当然能够,咱们革新一下代码: function doit<T>(arg: T): T { return arg;}这里通过<T>定义了一个类型变量T,而这个T具体是什么类型,应用的时候用户传递即可: let result: string = doit<string>("我是一个字符串");事实上,编译器通过查看arg的值的类型,能够推断出T示意什么类型,因而,大部分状况下,上述代码能够简化一下: let result: string = doit("我是一个字符串");泛型类型function doit<T>(arg: T): T { return arg;}let myDoit: Function = doit;咱们想把函数doit赋值给变量myDoit,咱们定义myDoit的类型是Function,那么,可不可以明确一下myDoit的类型细节?答案是必定的: let myDoit: <T>(arg: T) => T = doit;或 let myDoit: { <T>(arg: T): T } = doit;泛型接口聪慧的是必定能够想到,咱们还能够定义一个接口: interface DoitFnType { <T>(arg: T): T;} let myDoit: DoitFnType = doit;类型锁定当初有一个状况,咱们在给myDoit赋值的是,曾经明确了类型T的理论值肯定是string,那么,就能够这样改变: interface DoitFnType<T> { (arg: T): T;} let myDoit: DoitFnType<string> = doit;泛型类也非常简单,咱们间接举个例子: ...

January 17, 2023 · 1 min · jiezi

关于泛型:Java中泛型的基本介绍深入解析泛型的使用方式

泛型的基本概念泛型: 参数化类型 参数: 定义方法时无形参调用办法时传递实参参数化类型: 将类型由原来的具体的类型参数化,相似办法中的变量参数 类型定义成参数模式, 能够称为类型形参在应用或者调用时传入具体的类型,能够称为类型实参泛型的实质是为了参数化类型 在不创立新的类型的状况下,通过泛型指定的不同类型来管制形参具体限度的类型在泛型应用过程中,操作的数据类型被指定为一个参数,这种参数类型能够用在: 类 - 泛型类接口 - 泛型接口办法 - 泛型办法泛型示例: List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100); arrayList.forEach(i -> { String item = (String) arrayList.get(i); Log.d("泛型", "item = " + item);});这样的写法会导致程序出现异常解体完结: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String这里的ArrayList能够寄存任意类型,增加了一个String类型,增加了一个Integer类型,再应用时都以String的形式应用,因而程序解体泛型就是解决这样的问题再探讨另一种状况,如果将第一行申明初始的代码批改一下,那么在编译阶段就能发现问题: List arrayList = new ArrayList<String>();arrayList.add("aaaa");arrayList.add(100); // 这一步在编译阶段,编译器就会报错 arrayList.forEach(i -> { String item = (String) arrayList.get(i); Log.d("泛型", "item = " + item); });泛型只在编译阶段无效: List<String> stringArrayList = new ArrayList<String>();List<Integer> integerArrayList = new ArrayList<Integer>();Class classStringArrayList = stringArrayList.getClass();Class classIntegerArrayList = integerArrayList.getClass();if (classStringArrayList.equals(classIntegerArrayList)) { Log.d("泛型", "类型雷同");}能够发现,在编译过后,程序会采取去泛型化措施.也就是说,Java中的泛型,只在编译阶段无效.在编译过程中,正确测验泛型后果后,会将泛型的相干信息擦除,并且在对象进入和来到办法的边界处增加类型检查和类型转换办法 ...

August 9, 2021 · 5 min · jiezi

关于泛型:Java泛型方法的定义

一 点睛 泛型办法次要用于容器类,Java中任何办法,包含动态的(留神,泛型类不容许在动态环境中应用)和非动态的,均能够用泛型来定义,而且和所在类是否是泛型没有关系。 上面是泛型办法的定义 [public] [static] <T> 返回值类型 办法名(T 参数列表) 二 代码 public class GeneralMethod { public static <U> void print(U[] list) { System.out.println(); for (int i = 0; i < list.length; i++) { System.out.print(" " + list[i]); } System.out.println(); } public static void main(String[] args) { String a[]={"a","b","c","d","e"}; Character b[]={'1','2','3','4','5'}; Integer c[]={1,2,3,4,5}; GeneralMethod.print(a); GeneralMethod.print(b); GeneralMethod.print(c); } } 三 运行 a b c d e 1 2 3 4 5 1 2 3 4 5四 阐明 ...

December 19, 2020 · 1 min · jiezi