如何在Java回调函数中访问外部变量

时间:2013-12-27 10:38:14

标签: java jpa playframework-2.1

我开发了一个小型的框架项目并在内部块中使用jpa,如下所示:

private void sendMailToTheRegulator(final Machine mc, String rea) {
    List<LogProject> pros = null;
    try {
        pros = JPA.withTransaction(new Function0<List<LogProject>>() {
            @Override
            public List<LogProject> apply() throws Throwable {
                List<ServerModel> ss = JPA.em()
                        .createQuery("from ServerModel where machineId=")
                        .setParameter(1, mc.getId()).getResultList();
...
}

mcapply()不存在,因此我无法访问其id。当我执行代码时,它会抛出mc.getId()为空 我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

mc可以安全地用在您创建的Function0的匿名内部类实例中。仅当mc为null时,才会出现mc.getId()的空错误。如果getId()返回null,则null将作为值传递给setParameter方法。但是如果mc为null,那么你实际上是在尝试在一个不正确的null对象上调用方法getId。

因此,如果您在此代码中获取null,请检查您调用sendMailToTheRegulator方法的位置。很可能mc参数是以null传递的。