Java Getriebe

Java und NetBeans

Fragen zu mehrdeutige Methodenaufrufe

Ein kleines Codebeispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestAnwendung {
  public static void main(String[] args) {
    beliebigeMethode(true, new Object());
  }

  public static void beliebigeMethode(
      boolean arg1, Object... argList) {
    // do something
  }

  public static void beliebigeMethode(
      Object arg1, Object... argList) {
    // do something
  }
}

Und eine kleine Frage dazu: Welche Methode wird aufgerufen?

Der Compiler beantwortet die Frage mit: „Keine Ahnung.“ bzw. genauer mit

error: reference to beliebigeMethode is ambiguous, both method beliebigeMethode(boolean,java.lang.Object…) in TestAnwendung and method beliebigeMethode(java.lang.Object,java.lang.Object…) in TestAnwendung match

Die nächste Frage die sich hier stellt ist: Warum? Beim Aufruf steht ein „true“ also der atomare Typ boolean und nicht der Objectwrapper Boolean.TRUE. Warum meint der Compiler trotzdem die „Object“-Varainte der Methode könnte passen? Werden boolean bei Methodenaufrufen immer erst in den Wrapper gewandelt und danach erst wieder zurück? Welches Sinn macht das?

Interessanter Weise hat der Compiler keine Probleme mehr wenn man die „...“ beim zweiten Argument entfernt.

Ein Bug? Gewollt? Weiß jemand mehr?

One Response to Fragen zu mehrdeutige Methodenaufrufe