【问题标题】:Instantiate nested class in Scala when extending Java class扩展Java类时在Scala中实例化嵌套类
【发布时间】:2012-09-10 14:56:07
【问题描述】:

我有一个抽象的 java 类,其中包含声明为 protected static 的嵌套类:

public abstract class AbstractJavaClass {
  // contains nested class
  protected static class InnerClass {
  ...
  }
}

当我尝试在扩展 AbstractJavaClass 的 Scala 类中实例化它时,就像我在 java 中所做的那样(即仅在方法 new InnerClass 中引用名称):

class ScalaClass extends AbstractJavaClass {
   def method = new InnerClass()
}

我收到错误:类型 InnerClass 不是 ScalaClass 的成员。我究竟做错了什么?在java中同样的工作正常。

【问题讨论】:

    标签: java scala


    【解决方案1】:

    在这里偶然发现:access java base class's static member in scala

    它说

    This isn't possible in Scala. Since Scala has no notation of static you can't
    access protected static members of a parent class. This is a known limitation.
    

    虽然我无法解决最初的问题(当类为 protected static 时),但当我在 AbstractJavaClass 的定义中将其更改为 public static 时,我可以这样使用它:

    class ScalaClass extends AbstractJavaClass {
      import AbstractJavaClass.InnerClass
    
      def method = new InnerClass
    }
    

    使用 new InnerClass 而不导入会产生同样的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2020-07-29
      • 2013-07-04
      • 2021-02-19
      相关资源
      最近更新 更多