当代码将类实例化为类的接口类时,类实现并调用接口方法,方法调用未显示在方法实现的调用层次结构中(具体类)。
这是故意的,错误还是配置问题?
答案 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并不是一个好主意;它只会让人感到困惑。)