Scala 2.12.4:无法再从另一个包访问受保护的静态Java方法

Tei*_*raz 5 scala

我有带有受保护静态方法的java类:

package parent;

public class Parent {

    protected static void parentMethod() {
        System.out.println("I'm in parent static method");
    }

}
Run Code Online (Sandbox Code Playgroud)

在Scala 2.12.4(2.12.3)之前,我可以从另一个包中调用此方法,如下所示:

package child

import parent.Parent

class Child extends Parent {

  def childMethod = {
    println("I'm in child method and calling parentMethod")
    Parent.parentMethod()
  }

}
Run Code Online (Sandbox Code Playgroud)

但Scala 2.12.4不编译此代码.我收到错误:

错误:(9,12)在对象父类的方法parentMethod不能在对象parent.Parent访问访问到受保护的方法parentMethod不允许的,因为前缀类型parent.Parent.type不符合在包孩子在那里访问发生家长反对孩子.parentMethod()

这种访问模式对我来说非常重要,因为JOOQ代码生成使用它.

发生了什么?

ste*_*ino 4

不错,这很可能是此 PR引入的回归,作为此问题解决方案的一部分。

我已经为此开了一张票,您可以追踪。同时,如果这种访问模式对您的应用程序至关重要,那么不幸的是,我认为您没有太多选择,只能暂时坚持使用 Scala 2.12.3。

编辑

该问题已为人所知,并且已合并修复程序。截至撰写本文时,该补丁必然是 2.12.5 版本的一部分。