Einfaches tutorial, Beispiel, (lambda-Ausdruck) nicht laufen

Schließlich beschlossen, zu starten, ein wenig Experimentieren auf die neuen features von jdk8, nämlich die lambda-Ausdrücke nach dem tutorial. Für die Bequemlichkeit, ich stripped-down-Beispiel, siehe SSCCE unten.

Eingabe aus, die das Prädikat nur gut läuft, refactoring es um einen lambda-Ausdruck als vorgeschlagen (und tatsächlich) von Netbeans kompiliert (?) ohne Fehler, aber nicht ausgeführt. Die lakonische Konsole Ausdruck

Fehler: Hauptklasse einfach.Einfach konnte nicht gefunden oder geladen
werden

("Fehler: Hauptklasse konnte nicht gefunden oder geladen werden")

Umgebung:

  • jdk: jdk-8-ea-bin-b102-windows-i586-08_aug_2013.exe
  • Netbeans 7.4 beta, bundle aus 14.7.2013. Nicht sicher, ob das die neueste ist, konnte nicht download der Netbeans-Website (bekam einen "content encoding-Fehler" bei einem Klick auf den download-link)

BTW, dachte, der Verwendung von Netbeans, nur weil es bereits Unterstützung für jdk8 (wenn nicht netbeans, wer sonst 😉 - die eclipse-beta-preview von efxclipse hat ein ähnliches Problem (kompiliert, aber nicht ausgeführt Beispiel). Also definitiv raus aus meiner Komfort-zone, vielleicht ein paar ganz blöde Fehler meinerseits... ?

package simple; 

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Simple {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        List<Member> members = createMembers();
        //implement predicate directly, runs fine
//       Predicate<Member> predicate = new Predicate<Member>() {
//           public boolean test(Member member) {
//               return member.getAge() >= 18;
//           }
//       }; 
        //predicate converted to lambda, fails to run
        //"class couldn't be found"
        Predicate<Member> predicate = (Member member) -> member.getAge() >= 18; 
        for (Member member : members) {
            if (predicate.test(member)) {
                member.printMember();;
            }
        }
    }

    public static class Member {
        private String name;
        private int age;
        public Member(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public int getAge() {
            return age;
        }

        public void printMember() {
            System.out.println(name + ", " + getAge());
        }
    }

    private static List<Member> createMembers() {
        List<Member> members = new ArrayList<>();
        members.add(new Member("Mathilda", 45));
        members.add(new Member("Clara", 15));
        members.add(new Member("Gloria", 18));
        return members;
    }

}
Haben Sie versucht, läuft es von der Kommandozeile aus?
Nein, ich hasse den Befehl Linie noch mehr als Netbeans 😉 Neugierig: ist das Beispiel (mit der lambda) führen in Ihrem Kontext, entweder IDE oder Kommandozeile?
Es läuft wunderbar auf IntelliJIdea. Naja, das problem ist irgendwo anders. Sie sind wahrscheinlich versuchen, führen Sie eine andere Datei. Die Fehlermeldung, die Sie bekommen, suggeriert diese nur. Vergewissern Sie sich, läuft die gleiche Datei.
versucht, die (Art von): es ist das einzige mit diesem Namen - seltsam (für mich), dass gerade in den Kommentaren des lambda-und einkommentieren der eingegebenen out-Prädikat lässt es laufen. Vermute, das ist in der Tat etwas ähnlich dumm (eine andere Datei), obwohl

InformationsquelleAutor kleopatra | 2013-08-23

Schreibe einen Kommentar