NPE by Constructor Reference for enum

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Jun 8 00:58:55 PDT 2012


Good catch - the type of a constructor reference must denote a 
(non-abstract) class type.

Maurizio

On 08/06/12 01:14, bitter_fox wrote:
> Hi,
> The compiler(Revision of langtools is 1422) throws NPE by Constructor
> Reference for enum:
>
> public class Main
> {
>      interface SAM0<R>
>      {
>          R invoke();
>      }
>
>      enum E
>      {
>          A;
>
>          private SAM0<E>  sam = E::new; // NPE
>
>          E() {}
>
>          private void m()
>          {
>              //new E(); // compile time error
>          }
>      }
> }
>
> I think E::new would be compile time error like new E().
>
> Here is the StackTrace:
>
> java.lang.NullPointerException
>          at com.sun.tools.javac.util.ListBuffer.append(ListBuffer.java:129)
>          at com.sun.tools.javac.comp.Lower.boxArgs(Lower.java:2898)
>          at com.sun.tools.javac.comp.Lower.visitNewClass(Lower.java:2688)
>          at
> com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
>          at com.sun.tools.javac.comp.Lower.visitReturn(Lower.java:3385)
>          at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1312)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :70)
>          at
> com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.jav
> a:160)
>          at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3358)
>          at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at
> com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator
> .java:144)
>          at
> com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2667
> )
>          at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2586)
>          at
> com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
>          at
> com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.visitNewClass(Lower.java:2726)
>          at
> com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
>          at com.sun.tools.javac.comp.Lower.visitVarDef(Lower.java:3344)
>          at
> com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:781
> )
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
>          at
> com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
>          at
> com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
>          at
> com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
> :58)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
>          at com.sun.tools.javac.comp.Lower.translate(Lower.java:2220)
>          at
> com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3709
> )
>          at
> com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1418)
>
>          at
> com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1295)
>
>          at
> com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:892)
>
>          at
> com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:851)
>          at com.sun.tools.javac.main.Main.compile(Main.java:441)
>          at com.sun.tools.javac.main.Main.compile(Main.java:358)
>          at com.sun.tools.javac.main.Main.compile(Main.java:347)
>          at com.sun.tools.javac.main.Main.compile(Main.java:338)
>          at com.sun.tools.javac.Main.compile(Main.java:76)
>          at com.sun.tools.javac.Main.main(Main.java:61)
>
> Regards,
> bitter_fox
>



More information about the lambda-dev mailing list