简体   繁体   English

集合类型的方法重载无法按预期进行

[英]Method overloading with collection types doesn't work as expected

Consider the following class with overloaded methods. 考虑以下带有重载方法的类。

public final class TeaParty {
  private void travellerListed( Collection o) { 
    System.out.println("travellerListed(Collection<?>)"); 
  } 
  private void travellerListed( List s) { 
    System.out.println("travellerListed(List<Number>)"); 
  } 
  private void travellerListed( ArrayList i) { 
    System.out.println("travellerListed(ArrayList<Integer>)"); 
  }

  private void method(List t) { 
    travellerListed(t) ; 
  }

   public static void main(String[] args) { 
      TeaParty test = new TeaParty(); 
      test.method(new ArrayList ()); 
  } 
}

I'm expecting "travellerListed(ArrayList)" as output. 我期望“ travellerListed(ArrayList)”作为输出。 But I get "travellerListed(Collection)". 但是我得到“ travellerListed(Collection)”。 What cause for this unexpected overloading ? 是什么原因导致这种意外的过载?

实际上,您发布的代码会导致"travellerListed(List<Number>)" ,因为您将ArrayList传递给了参数类型为List method ,因此对于对travellerListed的调用,编译器选择了private void travellerListed( List s) ,因为方法重载分辨率由参数的编译时类型决定(这意味着不能选择private void travellerListed( ArrayList i) ),并且List是比Collection更具体的类型(这说明了为什么private void travellerListed( Collection o)为什么) private void travellerListed( Collection o)未选中)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM