Compiler-Fehler Lambda als Argument kompiliert nicht

Rudolf

Bekanntes Mitglied
Hi,
ich habe einen Kompiler-Hinweis, obwohl der Code kompiliert. Komischerweise tritt dieser Fehler nur in Verbindung mit folgendem Code auf, leider konnte ich es nicht weiter runterbrechen. Mir ist der genaue Grund unklar. Vielleicht ist es nur ein IDE Problem. Ich benutze IntelliJ, wobei das ja nicht IDE-abhängig sein sollte.

Für den Code sind folgende Dependencies zu benutzen

Java:
@FunctionalInterface
public interface CheckedFunction<T, R, E extends Throwable> {
    R apply(T t) throws E;
}

Java:
@FunctionalInterface
public interface CheckedSupplier<T, E extends Throwable> {
    T get() throws E;
}

Java:
public class Possible<T> {

    private static final Possible<?> EMPTY = new Possible<>();
    private final T value;

    private Possible() {
        this.value = null;
    }

    private Possible(T value) {
        this.value = requireNonNull(value);
    }

    @SuppressWarnings("unchecked")
    public static <T> Possible<T> empty() {
        return (Possible<T>) EMPTY;
    }

    public static <T> Possible<T> of(T value) {
        return value == null ? empty() : new Possible<>(value);
    }

    public static <T> Possible<T> of(Optional<T> value) {
        return value.isPresent() ? new Possible<>(value.get()) : empty();
    }

    public <E extends Throwable> Possible<T> checkedOr(Class<E> exception, CheckedSupplier<Possible<T>, E> supplier) throws E {
        requireNonNull(exception);
        requireNonNull(supplier);
        if (value != null) {
            return supplier.get();
        } else {
            return this;
        }
    }

    public <U, E extends Throwable> Possible<U> checkedMap(Class<E> exception, CheckedFunction<? super T, ? extends U, E> mapper) throws E {
        requireNonNull(exception);
        requireNonNull(mapper);
        if (value != null) {
            return empty();
        } else {
            return Possible.of(mapper.apply(value));
        }
    }
}

Folgender Code zeigt einen Kompilierfehler an

Java:
public class App {

    public static void main(String[] args) throws Exception {
        Possible.of(new Object())
            .checkedOr(Exception.class, () -> Possible
                .of("")
                .checkedMap(Exception.class, s -> throwException()));
    }

    private static Object throwException() throws Exception {
        throw new Exception();
    }


}

Der gleiche Code ohne das Lambda zeigt keinen Fehler an

Java:
public class App {

    public static void main(String[] args) throws Exception {
        Possible.of(new Object())
            .checkedOr(Exception.class, () -> Possible.of("")
                .checkedMap(Exception.class, new CheckedFunction<String, Object, Exception>() {
                        @Override
                        public Object apply(String s) throws Exception {
                            return throwException();
                        }
                    }
                ));
    }

    private static Object throwException() throws Exception {
        throw new Exception();
    }
}

Beide Code Snippets kompilieren, obwohl ein Kompilierfehler in der IDE angezeigt wird.

Kann sich das jemand erklären?
 

Rubber

Aktives Mitglied
Ist in der IDE Java 8 eingestellt?
(Mein Gedanke war, dass die IDE vllt auf Java 7 oder so eingestellt ist.)

Google meint:
In IntelliJ IDEA:

In File Menu → Project Structure → Project, change Project Language Level to 8.0 - Lambdas, type annotations etc.

Nur ne Idee, kein Anspruch auf Wahrheit oder ähnliches.
(Erst recht nicht zu dieser Uhrzeit ;-) )
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
A Lambda-Ausdrücke Allgemeine Java-Themen 5
A Lambda und Streams verstehen Allgemeine Java-Themen 4
O Best Practice Lambda Expressions Allgemeine Java-Themen 3
E Lambda filter performance Allgemeine Java-Themen 2
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
S An internal error occurred during: Launching null argument Allgemeine Java-Themen 1
X Console mit Argument öffnen? Allgemeine Java-Themen 10
F Classpath als Argument in Funktion übergeben Allgemeine Java-Themen 3
C Argument an einen Thread übergeben Allgemeine Java-Themen 4
K Command Line Argument Interpreter für komplexe Strukturen Allgemeine Java-Themen 9
Screen Eine mathematische Funktion als Argument für eine Methode - Matheparser? Allgemeine Java-Themen 21
G Fehler bei Array.getDouble mit Double[] als Argument! Allgemeine Java-Themen 6
F Parameter vs Argument Allgemeine Java-Themen 4
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
D Wie werden Regex-Gruppen kompiliert? Allgemeine Java-Themen 2
T Der Java-Editor kompiliert nicht... Allgemeine Java-Themen 7
G Auslesen mit welcher Java-Version Anwendung kompiliert wurde Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben