今天在用范形做为参数,方法重载时遇到这样的情况````想明白到底是什么道理`````想不通,不知道有没有高人指导下```按常理来说``````参数相同,返回值不同,重载是会发生错误的````例(1)如: public static NodeList cyc(NodeList nodeList, int span)
{
      `````` 
}这个方法不能重载public static void cyc(NodeList nodeList, int span)
{}
 但是在范形的应用中 如(例2)public static List<String> cyc(Node node, List<String> listHTMLText)
{}可以重载public static void cyc(Node node, List<Object> listHTMLText)
{}我本来以为是List<Object>和List<String>被认为是不同类型的参数,那么即然参类型不同,应该可以重载为(例3)
public static List<String> cyc(Node node, List<Object> listHTMLText)
{}但事实上这样是不能被重载的,载,如例2中的那样````java中重载必需要参数不同,或参数个数不同,排列不同,
返回值不同不能确定到底调用哪个方法`````
但是像上面那样,在有范形做为参数的情况下,必须要有不同的返回值```
各数,排列相同,只是其中的List为不同的范形时,不能重载,只有当范形值不同,
只有相同List ,范型不同,返回值也不同时,才能被重载, 好奇怪,在重载时同类型的范形参数到底是被认为是相同参数还是不同参数呢????

解决方案 »

  1.   

    我昨天夜里研究了半天,只知道是参数那部分的问题。
    楼主后面做的试验也说明了List<String>和List<Object>是同一种类型。
    我也试过输出new List<String> instanceof List,结果是true。
      

  2.   

    回来继续关注,还是没有解决之道```````5
    qq7338367也说list<string> 和list<Object>是一样的```
    在java中只能通过参数不同来判断重调方法的调用的,但是当参数中有范型的时候,却通过返回值来判断??那也太有趣了吧?``````
    哈哈,还是不明白奇中的道理`````
      

  3.   

    再顶一次,看来得去C++取经,C++早就有范型这东西了````不知道C++里是不是也这样的`````
      

  4.   

    这个是因为泛型机制的问题public static void cyc(Node node, List<Object> listHTMLText)
    {}这个是定义泛型自动提供的  
    但是代码中是不能以返回类型作为方法的区别
    但在虚拟机中是可以的  编译器会生成不同的直接码  
    说的简单点就是   sun的东西 他自己有特权  但是你就不行
    List<Object>  跟 List<String>  是同一个类型的 
    这个跟C++中的template是有区别的
    C++中的template会导致模版代码膨胀