Dart 语言泛型Generic

generic 泛型

泛型在现代面向对象语言中有很重要的地位。为什么要发明泛型这个概念呢?

维基百科上认为要加强安全和减少类型转换次数

一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一些支持泛型的程序语言只能达到部分目的。

下面是各个类型泛型介绍

.NET 泛型加快运行速度

.NET 泛型的参数只可以代表类,不能代表个别对象。由于 .NET 泛型的类型参数之实际类型在运行时均不会被消除,运行速度会因为类型转换的次数减少而加快。另外,使用GetType()方法可于程序运行时得知泛型及其类型参数的实际类型,更可以运用反射编程。

Java 泛型扩充类型,但速度并未提高

泛型在2004年的J2SE5.0时被引入Java语言的,泛型作用有两个分别为扩充类型体系和保障编译时类型安全。
由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。

由于运行时会消除泛型的对象实例类型信息等缺陷经常被人诟病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。

泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法。Dart由于不存在接口概念,所以Dart支持泛型类和泛型方法。下面我介绍一下Dart语言的泛型类。

下面是demo

class User {
  List credentials;
  User(){
    credentials = new List();
  }
  addCredential(C credential){
   
    this.credentials.add(credential);
  }
}
main() {
 
  User intUser= new User();
  intUser.addCredential(999);
 
  print(intUser.credentials);
}

运行效果:

[999]

你可能感兴趣的:(Dart 语言泛型Generic)