简体   繁体   English

扩展Java类时实例化Scala中的嵌套类

[英]Instantiate nested class in Scala when extending Java class

I have abstract java class which contains nested class declared as protected static : 我有抽象的Java类,其中包含声明为protected static嵌套类:

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

When I'm trying to instantiate it in Scala class extending AbstractJavaClass like I do in java (ie just referring name inside method new InnerClass): 当我试图在Scala类中实例化它扩展AbstractJavaClass时,就像在Java中一样(即,仅在方法new InnerClass中引用名称):

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

I get error: type InnerClass is not a member of ScalaClass . 我收到错误: InnerClass类型不是ScalaClass的成员 What am I doing wrong? 我究竟做错了什么? The same in java works fine. 在Java中也可以正常工作。

Stumbled here: access java base class's static member in scala 偶然发现: 在scala中访问java基类的静态成员

It says 它说

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.

Though I couldn't resolve initial issue (when class is protected static ), when I changed it to public static in definition of AbstractJavaClass I could use it this way: 尽管我无法解决最初的问题(当类protected static ),但是当我在AbstractJavaClass定义中将其更改为public static时,我可以通过以下方式使用它:

class ScalaClass extends AbstractJavaClass {
  import AbstractJavaClass.InnerClass

  def method = new InnerClass
}

Using new InnerClass without import gives the same error. 使用new InnerClass无进出口给出了同样的错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM