NullPointerException when type parameters are infered from method parameters
Thomas Jung
thomas.andreas.jung at googlemail.com
Thu Aug 12 00:13:49 PDT 2010
Hi,
I tried to implement the method reference example given on the mailing
list and got a NullPointerException in the compiler. The first version
sortBy works. The second version throws the exception.
public static <T, U extends Comparable<? super U>> void sortBy(T[]
array, final Extractor<T, U> extractor) {
Comparator<T> comparator = #(T left, T
right){extractor.get(left).compareTo(extractor.get(right)) };
Arrays.sort(array, comparator);
}
public static <T, U extends Comparable<? super U>> void sortBy2(T[]
array, Extractor<T, U> extractor) {
Comparator<T> comparator = #(left,
right){extractor.get(left).compareTo(extractor.get(right)) };
Arrays.sort(array, comparator);
}
String[] input = {"ab", "a", "c", "ba", "afd", "b"};
Arrays2.sortBy(input, String#length); //unstable sort by length
String[] expected = {"a", "c", "b", "ab", "ba", "afd"};
assertArrayEquals(input, expected);
java.lang.NullPointerException
at com.sun.tools.javac.comp.Flow.visitApply(Flow.java:1194)
at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1323)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.comp.Flow.scanStat(Flow.java:527)
at com.sun.tools.javac.comp.Flow.visitLambda(Flow.java:1269)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1479)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.comp.Flow.analyzeTree(Flow.java:1442)
at com.sun.tools.javac.comp.Flow.analyzeLambda(Flow.java:1239)
at com.sun.tools.javac.comp.Attr.attribLambda(Attr.java:2228)
at com.sun.tools.javac.comp.Attr.inferLambda(Attr.java:2132)
at com.sun.tools.javac.comp.Attr.visitLambda(Attr.java:2081)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1479)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:434)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:452)
at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:456)
at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:846)
at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:733)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:434)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:452)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:483)
at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:499)
at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:877)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:789)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:434)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:452)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:483)
at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:783)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:672)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:434)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:452)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:483)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3608)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3531)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3467)
at com.sun.tools.javac.comp.Attr.visitClassDef(Attr.java:664)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:601)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:434)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:452)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:483)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3608)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3531)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3467)
at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1129)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:849)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:808)
at com.sun.tools.javac.main.Main.compile(Main.java:409)
at com.sun.tools.javac.main.Main.compile(Main.java:327)
at com.sun.tools.javac.main.Main.compile(Main.java:318)
at com.sun.tools.javac.Main.compile(Main.java:100)
Thomas
More information about the lambda-dev
mailing list