Sie mischen Boxen mit Generika und das ist eine Sache, die zwischen dem Eclipse-Compiler und Javac unterscheidet. In Ihrem speziellen Fall wurde dies wahrscheinlich in Neon behoben. Zumindest funktioniert es in Oxygen.1.
Betrachten Sie den folgenden Code, die Arbeit in Eclipse und Javac:
Float f = Float.valueOf("1.0");
System.out.println("f: " + f);
double val = f;
System.out.println("val: " + val);
Aber in Ihrem Fall, die Sie verwenden eine Collection<T>
:
Collection<Float> f = Collections.singleton(Float.valueOf("1.0"));
System.out.println("f: " + f);
double val = Collections.min(f); // ECJ thinks Object!
System.out.println("val: " + val);
Der Einsatz von Generika hier ist der Schlüssel Teil Aus Erfahrung unterscheiden sich Eclipse und Javac am meisten. Ich kann Ihnen nicht das Spezifische sagen, aber in diesem Fall ignoriert Eclipse einfach die Tatsache, dass die T
der Sammlung ein primitiver Wrapper ist und nicht entpackt, sondern stattdessen mit einem Castfehler ausfällt.
TL; DR: Verwendung von Eclipse Oxygen.1 :)
Wenn Sie wirklich, nicht doubleValue()
wie in verwenden:
double val = Collections.min(f).doubleValue();
und sorgen dafür, dass die Sammlung nicht leer ist und tut enthält nicht null
s.
Ich kann diesen Fehler mit Eclipse Oxygen.1 nicht reproduzieren. Es scheint sich um einen bereits behobenen Fehler zu handeln, der [ein Update] (https://stackoverflow.com/a/46273081/6505250) beheben würde. – howlger
Kann auch nicht mit Neon reproduziert werden. – shmosel
Ich habe eine Version mit Sauerstoff, die dieses Problem nicht hat. Klingt so, als müsste ich meine Mars-Installation auf einen Oxygen aktualisieren. Schätzen Sie das Feedback! – simgineer