泛型:解决/类/接口/方法的复用性、以及对不特定数据类型的支持

摘要:泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

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


泛型函数

T表示泛型,具体什么类型是调用这个方法的时候决定的
function getData<T>(value:T):T{
	return value;
}
getData<number>(123);
getData<string>('1214231');
getData<number>('2112');       /*错误的写法*/  

function getData<T>(value:T):any{
	return '2145214214';
}
getData<number>(123);  //参数必须是number
getData<string>('这是一个泛型');


泛型类

class MaxClass<T> {
    public list:T[] = [];
    public add(value:T):void {
        this.list.push(value);
    }
    public max():T {
        var maxNum=this.list[0];
        for(var i=0;i<this.list.length;i++){
            if(maxNum<this.list[i]){
                maxNum=this.list[i];
            }
        }
        return maxNum;
    }
}

var maxc = new MaxClass();
maxc.add(1);
maxc.add(13);
maxc.add(5);
console.log(maxc.max());


泛型接口

写法一:
interface ConfigFn{
	<T>(value:T):T;
}

var getData:ConfigFn=function<T>(value:T):T{

	return value;
}

// getData<string>('张三');

写法二:
interface ConfigFn<T>{
      (value:T):T;
}
var  myGetData:ConfigFn<string>= function getData<T>(value:T):T {
      return value
}
myGetData('20');  /*正确*/


把类作为参数

//定义操作数据库的泛型类
class MysqlDb<T>{
    add(info:T):boolean{
        console.log(info);       
        return true;
    }
    updated(info:T,id:number):boolean {
        console.log(info);  
        
        console.log(id); 

        return true;
    }
}

// 参数类
class User{
    username:string | undefined;
    pasword:string | undefined;
}
var u=new User();
u.username='张三';
u.pasword='123456';
var Db=new MysqlDb<User>();
Db.add(u);

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_6484