2

Java がコンパイル時の型に基づいてメソッドをディスパッチすることは既に知っています。ただし、それが機能することを期待しているケースがありますが、機能しません。

次の簡単な例を考えてみましょう。

class Foo{ 
    void bar(Object... objects) { //do something }

    void bar(Map<String, Object> map) { //do something else }
}

および呼び出しコード:

Foo foo = new Foo();
HashMap<String, T> map = createSomeHashMap(); //wil generate HashMap
foo.bar(map);

なぜ Java は、呼び出すのが最も適切であると考えているのでしょうbar(Object... objects)か? 私は compileTime にマップを持っているので、すべてがうまくいくはずです! なぜ明示的にダウンキャストする必要があるのですfoo.bar((Map<String, Object>)map);か??

4

1 に答える 1