当泛型遇见重载

看下面两个例子,让我们重新认识重载: 例子1:

public class OverloadTest {
        public void testType(List<String> list) {
    System.out.println("String....");
}

public void testType(List<Integer> list) {
    System.out.println("Integer....");
}
  }


 

这两个方法重载是失败的,但是我们知道java的泛型是伪泛型,编译之后类型都被擦除了,因此这段代码不能通过编译,因为String类型和Integer类型被擦除之后,两个方法是一样的。

 

例子2:

public class OverloadTest {
    public String testType(List<String> list) {
    System.out.println("String....");
                     return "";
}

public int testType(List<Integer> list) {
    System.out.println("Integer....");
                      return 1;
}
}


 

这段代码能够顺利通过编译,并且重载成功了。因为我们加入了返回值吗?这是对java语言中返回值不参与重载选择的基本认知的挑战码? 重载要求方法具有不同的特征签名,返回值并不包含在方法的特征签名之中,所以返回值不参与重载选择,但是在class文件格式中,只要描述符不是完全一致的两个方法就可以共存。也就是两个方法如果有相同的名称和特征签名,但是返回值不同它们就可以合法的共存于一个class文件之中。这也是例子1不能通过编译的原因。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值