Compiler-Fehler Lambda als Argument kompiliert nicht

Diskutiere Lambda als Argument kompiliert nicht im Allgemeine Java-Themen Forum; Hi, ich habe einen Kompiler-Hinweis, obwohl der Code kompiliert. Komischerweise tritt dieser Fehler nur in Verbindung mit folgendem Code auf,...

  1. Rudolf
    Rudolf 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

    Code (Java):
    @FunctionalInterface
    public interface CheckedFunction<T, R, E extends Throwable> {
        R apply(T t) throws E;
    }
    Code (Java):
    @FunctionalInterface
    public interface CheckedSupplier<T, E extends Throwable> {
        T get() throws E;
    }
    Code (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

    Code (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

    Code (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?
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Rubber
    Rubber Mitglied
    Ist in der IDE Java 8 eingestellt?
    (Mein Gedanke war, dass die IDE vllt auf Java 7 oder so eingestellt ist.)

    Google meint:
    Nur ne Idee, kein Anspruch auf Wahrheit oder ähnliches.
    (Erst recht nicht zu dieser Uhrzeit ;-) )
     
  4. Neumi5694
    Neumi5694 Mitglied
    "ein Kompilierfehler" ... das hilft bei der Fehlersuche ungemein. Rubber's Idee ist auf jeden Fall aber einen Versuch wert.
     
Die Seite wird geladen...

Lambda als Argument kompiliert nicht - Ähnliche Themen

Lambda Expressions
Lambda Expressions im Forum Allgemeine Java-Themen
Lambda - Ausdruck zu Beschreibung erstellen
Lambda - Ausdruck zu Beschreibung erstellen im Forum Java Basics - Anfänger-Themen
Lambda - Ausdrücke verstehen
Lambda - Ausdrücke verstehen im Forum Java Basics - Anfänger-Themen
Lambda-Expression
Lambda-Expression im Forum Java Basics - Anfänger-Themen
Lambda-Funktion bei Binärbäumen
Lambda-Funktion bei Binärbäumen im Forum Java Basics - Anfänger-Themen
Thema: Lambda als Argument kompiliert nicht