/*

通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)

*/

//只能返回string类型的数据

  // String getData(String value){
// return value;
// } //同时支持返回 string类型 和int类型 (代码冗余) // String getData1(String value){
// return value;
// } // int getData2(int value){
// return value;
// } //同时返回 string类型 和number类型 不指定类型可以解决这个问题 // getData(value){
// return value;
// } //不指定类型放弃了类型检查。我们现在想实现的是传入什么 返回什么。比如:传入number 类型必须返回number类型 传入 string类型必须返回string类型 // T getData<T>(T value){
// return value;
// } getData<T>(T value){
return value;
} void main(){ // print(getData(21)); // print(getData('xxx')); // getData<String>('你好'); print(getData<int>(12)); }
//集合List 泛型类的用法

//案例:把下面类转换成泛型类,要求List里面可以增加int类型的数据,也可以增加String类型的数据。但是每次调用增加的类型要统一

//  class PrintClass{
// List list=new List<int>();
// void add(int value){
// this.list.add(value);
// }
// void printInfo(){
// for(var i=0;i<this.list.length;i++){
// print(this.list[i]);
// }
// }
// } // PrintClass p=new PrintClass();
// p.add(1);
// p.add(12);
// p.add(5);
// p.printInfo(); class PrintClass<T>{
List list=new List<T>();
void add(T value){
this.list.add(value);
}
void printInfo(){
for(var i=0;i<this.list.length;i++){
print(this.list[i]);
}
}
} main() {
// PrintClass p=new PrintClass();
// p.add(11);
// p.add('xxx');
// p.add(5);
// p.printInfo(); // PrintClass p=new PrintClass<String>(); // p.add('你好'); // p.add('哈哈'); // p.printInfo(); PrintClass p=new PrintClass<int>(); p.add(12); p.add(23); p.printInfo(); // List list=new List();
// list.add(12);
// list.add("你好");
// print(list); // List list=new List<String>(); // // list.add(12); //错误的写法 // list.add('你好');
// list.add('你好1'); // print(list); // List list=new List<int>(); // // list.add("你好"); //错误写法
// list.add(12); // print(list); }
/*
Dart中的泛型接口: 实现数据缓存的功能:有文件缓存、和内存缓存。内存缓存和文件缓存按照接口约束实现。
1、定义一个泛型接口 约束实现它的子类必须有getByKey(key) 和 setByKey(key,value)
2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致 */ // abstract class ObjectCache {
// getByKey(String key);
// void setByKey(String key, Object value);
// } // abstract class StringCache {
// getByKey(String key);
// void setByKey(String key, String value);
// } // abstract class Cache<T> {
// getByKey(String key);
// void setByKey(String key, T value);
// } abstract class Cache<T>{
getByKey(String key);
void setByKey(String key, T value);
} class FlieCache<T> implements Cache<T>{
@override
getByKey(String key) {
return null;
} @override
void setByKey(String key, T value) {
print("我是文件缓存 把key=${key} value=${value}的数据写入到了文件中");
}
} class MemoryCache<T> implements Cache<T>{
@override
getByKey(String key) {
return null;
} @override
void setByKey(String key, T value) {
print("我是内存缓存 把key=${key} value=${value} -写入到了内存中");
}
}
void main(){ // MemoryCache m=new MemoryCache<String>(); // m.setByKey('index', '首页数据'); MemoryCache m=new MemoryCache<Map>(); m.setByKey('index', {"name":"张三","age":20});
}

Dart泛型的更多相关文章

  1. Dart语言学习(十四) Dart泛型

    什么是泛型? 通俗理解:泛型就是解决 类 接口 方法的复用性.以及对不特定数据类型的支持(类型校验) 如下代码,只能返回string类型的数据 String getData(String value) ...

  2. 【Dart学习】-- Dart之泛型

    一,概述  Dart是一种可选的类型语言.Dart中的集合默认是异构的.换句话说,单个Dart集合可以托管各种类型的值.但是,可以使Dart集合保持同质值.泛型的概念可以用来实现同样的目的. 泛型的使 ...

  3. Dart Generic All In One

    Dart Generic All In One Dart 泛型 https://dart.dev/guides/language/language-tour#generics /** * * @aut ...

  4. 8.Generics 泛型(Dart中文文档)

    这篇翻译的不好 如果你看API文档中的数组篇,你会发现类型一般写成List.<...>的写法表示通用类型的数组(未明确指定数组中的数据类型).通常情况泛型类型用E,T,S,K,V表示. W ...

  5. dart系列之:dart类中的泛型

    目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在集合 ...

  6. Dart语法基础

    hello world // Define a function. printNumber(num aNumber) { print('The number is $aNumber.'); // Pr ...

  7. [Dart]语法基础

    此页面向您展示如何使用每个主要Dart功能,从变量和运算符到类和库,假设您已经知道如何使用其他语言编程. 要了解有关Dart核心库的更多信息,请参阅 Dart Libraries之旅.无论何时需要有关 ...

  8. Dart 语言了解

    Dart 语言了解 概念 当您了解Dart语言时,请记住以下事实和概念: 您可以放在变量中的所有内容都是一个对象,每个对象都是一个类的实例.偶数,函数和 null对象.所有对象都从Object类继承. ...

  9. 30分钟掌握Dart语言

    在Dart中,一切都是对象,一切对象都是class的实例,哪怕是数字类型.方法甚至null都是对象,所有的对象都是继承自Object 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推 ...

随机推荐

  1. 用js刷剑指offer(数组中的逆序对)

    题目描述 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P ...

  2. [Exception] java.util.MissingFormatArgumentException: Format specifier '%s'

    java.util.MissingFormatArgumentException: Format specifier '%s' at java.util.Formatter.format(Format ...

  3. 正确robots写法,解决百度搜索不显示缩略图问题

    网站上线http://zhimo.yuanzhumuban.cc/有一年左右时间了,百度搜索显示略缩图少之又少,通过自己这几天的观察发现. 结合百度站长平台的 robots 工具和抓取诊断工具检查后, ...

  4. docker 构建自己的image 镜像文件

    docker build 构建自己的镜像文件. 1.在本地工程中运行生成一个springboot的可运行的jar. 因为我习惯用eclipse,所以在eclipse下新建一个springboot的工程 ...

  5. 【shell】2、判断表达式、if语句

    文件类型判断 test -e filename:该文件名是否存在 test -f filename:该文件名是否存在且为文件(file) test -d filename:该文件名是否存在且为目录(d ...

  6. 学习Spring-Data-Jpa(三)---关联关系常用注解

    1.@JoinColumn: 用于指定 连接实体关联或元素集合的列. 属性 name: 外键列的名称,它所在的表取决于上下文. 如果连接是使用外键映射策略的一对一或多对一映射,则外键列位于源实体或可嵌 ...

  7. 180908 input

    input while if # -*- coding:utf-8 -*- flag = 0 while flag == 0 : username = input('请输入用户名:\n') passw ...

  8. (尚013)Vue的生命周期

    三个阶段: 一.初始化显示; 二:更新显示 三.死亡 每一个阶段都对应生命周期的回调函数(也叫勾子函数) 生命周期图示: 1. 2.test013.html <!DOCTYPE html> ...

  9. Problem 5 素数筛法+并查集

    $des$ 给定一个长度为 $n$ 的正整数序列 ${a_i }$.将 ${1,2,...,n}$ 划分成两个非空集合 $S.T$,使得 $gcd(\prod_{i \in S} a_i, \prod ...

  10. C#中的Byte,String,Int,Hex之间的转换函数。

    /// <summary> Convert a string of hex digits (ex: E4 CA B2) to a byte array. </summary> ...