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