Eclipse调用层次结构不适用于接口实现

时间:2018-03-15 07:47:57

标签: java eclipse

当代码将类实例化为类的接口类时,类实现并调用接口方法,方法调用未显示在方法实现的调用层次结构中(具体类)。

这是故意的,错误还是配置问题?

1 个答案:

答案 0 :(得分:0)

  

...方法调用未在方法的调用层次结构中显示   实施(具体类)。

那是因为具体类可能直到运行时才知道。

以下是调用 add()时已知具体类的示例;除了 ArrayList

之外,它不可能是任何东西
final Collection<Integer> coll = new ArrayList<Integer>();
coll.add(3);

在该示例中,Eclipse可以(但不)在 add()的调用层次结构中显示 ArrayList ;相反,它显示集合

但是这个例子呢?..

int rand = new Random().nextInt(99);
Collection<Integer> coll2 = (rand < 50) ? new ArrayList<Integer>() : new ArrayDeque<Integer>();
coll2.add(5);

在这种情况下,当Eclipse显示 add()的调用层次结构时,它无法知道具体类是 ArrayList 还是 ArrayDeque ,但无论哪种方式,它都确定接口类型是集合,这就是调用层次结构中显示的内容。

  

这是故意的,错误还是配置问题?

嗯,您必须向Eclipse团队询问最后一句话,但在我看来,它是故意的并且正常工作。

它当然不是一个错误,据我所知,如果在编译时确定已知,您可以更改配置以将接口类型替换为具体类。 (我想这可能是可能的,但IMO并不是一个好主意;它只会让人感到困惑。)