Java重载

Java重载,java,overloading,Java,Overloading,我在一次采访中被问到这个问题 有人能解释一下吗 public class A{ public void show(List <String>list1,List<Integer>lists2){...} public void show(List <Integer>list1,List<String>lists2){...} } public class B{ public static void main(..){

我在一次采访中被问到这个问题

有人能解释一下吗

public class A{

     public void show(List <String>list1,List<Integer>lists2){...}

     public void show(List <Integer>list1,List<String>lists2){...}
}
public class B{
 public static void main(..){
    A a=new A();
    List<String> list1;
    List<Integer>lists2;
    a.show(list1,lists2);
     }
   }
公共A类{
公共无效显示(列表1、列表2){…}
公共无效显示(列表1、列表2){…}
}
公共B级{
公共静态空干管(…){
A=新的A();
清单1;
列表2;
a、 显示(列表1、列表2);
}
}
我说过要调用2函数。。但当我在neatbeans工作时,它给出了调用同名函数的错误。。。??? 为什么这里不使用重载概念呢?

由于,该方法的参数将变成
List

public void show(List list1, List list2);
public void show(List list1, List list2);

因此成为无效代码。

Java泛型在编译时强制执行,但集合的类型被删除,剩下的是一个重复的方法。在IDE中,您会得到一些关于“同类型擦除”的消息

下面是我喜欢的关于它的一个很好的讨论:

首先,从一个类声明(实际上是从类A)中删除“public”

其次,编译器正在以
show(list,list)
的形式读取参数,因此它提供了相同的方法,并且这里没有发生重载。 由于两个参数都是
显示(列表,列表)

请记住,泛型用于区分对象类型而不是返回类型


希望它能工作。

您的代码无法编译。两种
show
方法具有相同的擦除。