【问题标题】:Is a List<T> considered as an Object, Collection or anything else - Java是否将 List<T> 视为对象、集合或其他任何东西 - Java
【发布时间】:2017-07-19 16:10:57
【问题描述】:

我有一个包含这四个方法的 B 类:

public class B {

public void f(int x) {
    System.out.println("1");
}

public void f(Object x) {
    System.out.println("2");
}

public void f(List x) {
    System.out.println("3");
}
public void f(Collection x){
    System.out.println("4");
}

我主要有以下命令:

B o = new B();
    Integer n = new Integer(3);
    List<Integer> l = new ArrayList<>();
    Collection<Integer> m = new ArrayList<>();
    o.f(3);
    o.f(n);
    o.f(l);
    o.f(m);

结果将是:
1
2
3
4

为什么“3”被认为是 int 而 Integer(3) 被认为是 Object? 为什么 List 或 Collection 不被视为对象?

【问题讨论】:

  • 一个是原始类型,另一个是对象。
  • 因为 3 是原始 int。而 Integer(3) 是一个包装类型为 int 的对象。

标签: java


【解决方案1】:

它在编译时选择最具体的方法版本。

Integer 被视为Object,因为Object(它继承自Object):

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

如果您没有更具体的方法版本,CollectionList 也将被视为 Object

但由于您还重载了 CollectionList 的方法,因此使用了这些方法。

【讨论】:

  • 谢谢,回答了我的问题! :)
【解决方案2】:

这里有两个问题,我只看List、Collection、Object,因为Integer int 在其他地方得到了回答。

使用最指定的方法。

所以 List 继承自 Collection 并且它们都是 Object。这使得 List 更加具体,因此当您传递 List 时,它会选择将 List 作为参数的方法。即使 List 可以传递给 Object 或 Collection 方法。您可以通过演员获得相同的效果。

o.f(((Object)l));

结果为 2。

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2012-06-21
    相关资源
    最近更新 更多