Unterschiede in der Typinferenz JDK8 javac / Eclipse Luna?

Ich versuche, ein Projekt auf Java8 umzustellen, und stoße auf merkwürdige Unterschiede zwischen der Typinferenz von Eclipse Luna und javac. Mit JDK 1.7.0_65 kann dieser Code problemlos kompiliert werden. JDK 1.8.0_11 beklagt, dass sowohl toString (char []) als auch toString (Throwable) für "toString (getKey (code, null)" übereinstimmen. Linie. Eclipse Luna 4.4 (I20140606-1215) kompiliert es problemlos mit beiden JDKs:

public class TypeInferenceTest {
    public static String toString(Object obj) {
        return "";
    }

    public static String toString(char[] ca) {
        return "";
    }

    public static String toString(Throwable t) {
        return "";
    }

    public static <U> U getKey(Object code, U defaultValue) {
        return defaultValue;
    }

    public static void test() {
        Object code = "test";
        toString(getKey(code, null));
    }
}

Ich denke, die einzige Signatur, die möglicherweise übereinstimmen könnte, ist toString (Object).

Natürlich könnte ich Object einfach eine Besetzung hinzufügen, aber ich frage michWarum Javac kann den Typ nicht selbst beeinflussen (während Eclipse dies tut), und warum zum Teufel betrachtet Javac Throwable und char [] als geeignete Übereinstimmungen, aber nicht Object.

Ist das ein Fehler in Eclipse oder Javac? (Ich meine, nur ein Compiler kann hier richtig sein, entweder kompiliert er oder nicht)

Edit: Fehlermeldung von javac (JDK8):

C:\XXXX\Workspace\XXXX\src>javac -cp . TypeInferenceTest.java
TypeInferenceTest.java:22: error: reference to toString is ambiguous
                toString(getKey(code, null));
                ^
  both method toString(char[]) in TypeInferenceTest and method toString(Throwable) in TypeInferenceTest match
1 error

Antworten auf die Frage(2)

Ihre Antwort auf die Frage