首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 10编译空指针异常

java 10编译空指针异常
EN

Stack Overflow用户
提问于 2018-06-16 05:49:21
回答 3查看 3.6K关注 0票数 17

我最近安装了jdk10。我在做正常的代码,但它不起作用。

我在这里做错什么了吗?请查看代码和异常堆栈跟踪。据我所知,这种行为不应该有任何理由。

代码语言:javascript
复制
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<>() {});
    }
}

导入的College类是:

代码语言:javascript
复制
public class College<T> {
    int id;
    protected College() {
    }

    College(int id){
        this.id=id;
    }
} 

在编译这一过程中,javac编译器使用以下堆栈跟踪崩溃:

代码语言:javascript
复制
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) 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-16 13:00:31

据报道,这是一个未解决的问题。这个bug计划在jdk 11中解决。

JDK-8203195-匿名类类型推理结果在NPE中的应用

代码语言:javascript
复制
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

但是,bug描述中提到了一项工作,其中指出:

有趣的是,将A.java更改为执行以下操作: Object baz => foo.foo(new B<Object>() {}); 或将foo/B.java更改为: 包foo;公共类B{ B(int baz) {}受保护的B() {} 成功编译的结果。

票数 17
EN

Stack Overflow用户

发布于 2019-10-25 21:35:18

即使是bug报告状态仍然是开放的,使用java 11修复为我解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2021-11-30 09:38:03

我也犯了同样的错误,我找不到任何解决办法。即使当我尝试使用java 11进行编译(有人说它是固定的),它仍然失败,同样的错误。

但这一错误只是误导了。在对代码和重试进行了一些更改之后(我删除了一些代码.),我发现实际的错误是一些缺少的库,我在类路径中添加了这些库,构建成功了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50885335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档