首页 > 其他 > 详细

6、泛型

时间:2020-08-16 12:11:40      阅读:80      评论:0      收藏:0      [点我收藏+]
泛型:  
  软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑下可重用性。组件不仅能支持当前的数据类型,同时也能支持未来不确定的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
  在像c#和JAVA这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据,这样用用户可以以自己的数据类型来使用组件。
通俗理解:泛型就时解决 类 接口 方法的可复用型。以对不特定的数据类型的支持(类型校验)。
 
同时返回string类型和number类型    (代码冗余)
function getData1(value:string):string{
    return value
}
function getData2(value:number):number{
    return value
}
同时返回string类型和number类型 。
any可以解决这个问题,但是any放弃了类型检查
传入的参数类型和返回的数据类型可以不一致
function getData3(value:any):any{
    return ‘哈哈哈‘
}
alert(getData3(‘str‘))
alert(getData3(111))
泛型:可以支持不特定的数据类型   要求:传入的参数和返回的参数一致
T表示泛型,具体什么类型就时调用这个方法的时候决定的
function getData<T>(value:T):T{
    return value;
}

getData<number>(123456);
getData<number>(‘123456‘);//错误写法
getData<string>(‘12365478899‘);
getData<boolean>(true);

function getData<T>(value:T):any{//返回任意类型
    return ‘852‘;
}

----------------------------------------------------------------泛型类----------------------------------------------------

泛型类:比如有个最小堆算法,需要同时支持数字和字母a-z两种类型
普通写法
class MinClass{
    public list:number[]=[];
    add(num:number){
        this.list.push(num);
    }
    min():number{
        var minNum=this.list[0];
        for (let i = 0; i < this.list.length; i++) {
            const element = this.list[i];
            if(minNum>element){
                minNum = element;
            }
        }
        return minNum;
    }
}

var m = new MinClass();
m.add(3);
m.add(300);
m.add(50);
m.add(1);
m.add(111);
alert(m.min());//1
类的泛型
class MinClass<T>{
    public list:T[]=[];
    add(num:T):void{
        this.list.push(num);
    }
    min():T{
        var minNum=this.list[0];
        for (let i = 0; i < this.list.length; i++) {
            const element = this.list[i];
            if(minNum>element){
                minNum = element;
            }
        }
        return minNum;
    }
}

var m = new MinClass<number>();/*实例化类 并且定制了类的T代表的类型时number*/
m.add(3);
m.add(300);
m.add(50);
m.add(1);
m.add(111);
alert(m.min());//1

var m1 = new MinClass<string>();/*实例化类 并且定制了类的T代表的类型时string*/
m1.add(‘a‘);
m1.add(‘z‘);
m1.add(‘b‘);
m1.add(‘t‘);
m1.add(‘g‘);
alert(m1.min());//‘a‘

 

6、泛型

原文:https://www.cnblogs.com/wenshaochang123/p/13511814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!