对于没有泛型的情况 比如
max(a : int , b:int){
xxx
}
入参是a , b ,这两个参数的类型的约束是 int
,
也就是这个函数的约束是 max(int , int)
泛型的语义就是:
max(a :<T> , b:<T>){
}
这个约束是什么?
约束变成
max(<T> ,<T>)
作用: 我们的约束变更加范化了,这个如果按照编译原理或者解空间来说,我们可选的映射更多了.
泛型的作用:和类的继承差不多,因为继承既是优点也是缺点.
泛型这个约束也是既有优点也有缺点,泛型的优点是更加接近无类型类型,所以缺点也是大家会滥用无类型的内容
就像继承一样,其实很多继承是没有必要的,或者重构的继承非常难.
说到底,如果我们写了一个通用的轮子,如果和多地方用到了这个轮子,那么如果这个轮子经常更改,就需要考虑用到这个轮子的相关代码是不是要兼容
如果这个轮子被共用的地方少,那么就不用兼容那么多
所以我们抽象就比如面临改动频繁的缺点