java中的重载和typescript中的重载
一、 java中重载
重载规则
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
简单来说就是方法名相同,参数不同【可以是类型,可以是个数】,和返回值没关系,不能用作区分,在java中广泛被用到。
public class demoCZ {
public static void main(String[] args) {
test(12333);
System.out.println("-----------------");
test(1, "sdddd");
}
public static void test(int a) {
System.out.println("测试1:" + a);
}
public static String test(int a, String s) {
System.out.println("测试2:" + a);
System.out.println("测试2:" + s);
return "returntest3";
}
}
上面代码运行时会自动根据参数类型和个数找到对应方法执行。
二、typescript中的重载
重载规则
多个函数函数名相同,函数的参数类型,顺序,个数不同。同样注意函数重载与返回值类型无关。
// 重载
function getinfo(name: string): string;
function getinfo(name: string, age: number): string;
function getinfo(name: any, age?: any): any { // 需要使用 |操作符或者?操作符,把所有可能的输入类型全部包含进去,也可使用any
if (typeof age === 'number') {
return `我是:${name} 年龄是:${age}`
} else {
return `我是:${name}`
}
}
getinfo('abc')
getinfo('abc',123)
ts中的函数重载只是在编译时进行检测,最终实现需要在函数体内去判断它的参数类型、个数,然后实现不同的逻辑。毕竟最终会编译为js执行,而js的同名函数后面定义的会覆盖之前的。
相比于java的重载,typescript的重载就显得有些鸡肋了。
发表评论 (审核通过后显示评论):