第一个是两个方法只有返回值有变化,有没有什么问题(重载)。
有问题,编译不通过
方法签名是由:方法名称 + 参数类型 + 参数个数组成的一个唯一值,这个唯一值就是方法签名,而 JVM(Java 虚拟机)就是通过这个方法签名来决定调用哪个方法的。
例子:
public class OverloadExample {
public static void main(String[] args) {
OverloadExample example = new OverloadExample();
example.method("磊哥"); // JVM 应该调用哪个方法?
}
public int method(String name) {
// doSomething
return 666;
}
public String method(String name) {
// doSomething
return "磊哥聊编程";
}
}
第二个是只变了参数列表的泛型,重载有没有问题。
编译不通过
public class GenericTypes{
public static void method(List<String> list) {
System.out.println("invoke method(List<String> list)");
}
public static void method(List<Integer> list) {
System.out.println("invoke method(List<Integer> list)");
}
}
上面这段代码是不能被编译的,因为参数List<Integer>和List<String>编译之后都被擦除了,变成了一样的原生类型List<E>。