java 10 compilaton Null Pointer Exception

  • A+
Category:Languages

I recently installed jdk10. I was doing normal code and it is not working.

Am I doing something wrong here? Please see the code and Exception stacktrace. As far as I understand there should be no reason for such behaviour.

import com.bean.College;  public class Student {      interface Club {         <T> T get(College<T> key);     }      private Club club;      Student() {         Object obj = club.get(new College<>() {});     } } 

The imported College class is:

public class College<T> {     int id;     protected College() {     }      College(int id){         this.id=id;     } }  

On compiling this the javac compiler crashes with the following stacktrace:

java.lang.NullPointerException         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1233)         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1634)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)         at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitVarDef(Flow.java:987)         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:956)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)         at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitBlock(Flow.java:995)         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1020)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)         at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitMethodDef(Flow.java:962)         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)         at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitClassDef(Flow.java:925)         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:774)         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)         at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1325)         at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1315)         at jdk.compiler/com.sun.tools.javac.comp.Flow.analyzeTree(Flow.java:216)         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1393)         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1367)         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:965)         at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:306)         at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:165)         at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)         at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)  

 


It is a reported unresolved bug. The bug is planned to be resolved in jdk 11.

JDK-8203195-Anonymous class type inference results in NPE

Type:                 Bug Status:               In Progress Priority:             P2 Resolution:           Unresolved Affects Version/s:    9, 10, 10.0.1, 11 Fix Version/s:        11 Component/s:          tools Labels:               dcsfai reproducer-yes webbug   Subcomponent:         javac CPU:                  generic  OS:                   generic 

https://bugs.openjdk.java.net/projects/JDK/issues/JDK-8203195?filter=allopenissues

However, there is a work around mentioned in the bug description which states:

Interestingly, changing A.java to do the following:

Object baz = foo.foo(new B<Object>() {});

or changing foo/B.java to the following:

 package foo;   public class B<T> {   B(int baz) {   }   protected B() {   }   } 

results in a successful compilation.

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: