最後決定開始對jdk8的新功能進行一些實驗,即lambda expressions following the tutorial。爲方便起見,我簡化了示例,請參閱下面的SSCCE。簡單教程示例(lambda表達式)不運行
輸入謂詞運行良好,將其重構爲一個lambda表達式,如Netbeans編譯(?)建議(並且實際完成),但不會運行。的簡潔的控制檯打印輸出是
Fehler: Hauptklasse simple.Simple konnte nicht gefunden oder geladen werden
( 「錯誤:主類找不到或裝載」)
環境:
- JDK:JDK-8-EA-倉-B102 -windows-i586-08_aug_2013.exe
- Netbeans 7.4 beta,捆綁從14.7.2013。不知道這是最新的,不能從NetBeans網站下載
BTW,使用NetBeans的思想不僅是因爲它已經有jdk8支持(其下載鏈接,當點擊了一個「內容編碼錯誤」) (如果不是netbeans,還有誰;-) - efxclipse的eclipse beta預覽版有一個類似的問題(編譯但不運行該示例)。因此,絕對脫離我的舒適區,可能是我的一些非常愚蠢的錯誤......?
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;
}
}
你試過從命令行運行它嗎? –
@RohitJain不,我討厭命令行甚至超過Netbeans ;-)好奇:這個例子(使用lambda)在你的上下文中運行,不管是IDE還是命令行? – kleopatra
它在IntelliJIdea上運行良好。那問題就在別的地方了。您可能試圖運行不同的文件。你得到的錯誤只是表明了這一點。確保你正在運行相同的文件。 –