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的重载就显得有些鸡肋了。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):