当前位置: 首页 > 面试题库 >

在scala中访问java基类的静态成员

郎建章
2023-03-14
问题内容

我有一些用Java编写的代码。对于新课程,我计划在Scala中编写。我在访问基类的受保护静态成员时遇到问题。这是示例代码:

Java代码:

class Base{
    protected static int count = 20;
}

标量代码:

class Derived extends Base{
    println(count);
}

有什么建议吗?我如何在不修改现有基类的情况下解决这个问题


问题答案:

这在Scala中是不可能的。由于Scala没有记号,static您不能访问protected static父类的成员。这是一个已知的限制。

解决方法是执行以下操作:

// Java
public class BaseStatic extends Base {
  protected int getCount() { return Base.count; }
  protected void setCount(int c) { Base.count = c; }
}

现在,您可以改为从这个新类继承,并通过getter / setter方法访问静态成员:

// Scala
class Derived extends BaseStatic {
  println(getCount());
}

这很丑陋-但是,如果您真的想使用protected static成员,那就必须这样做。



 类似资料:
  • 在Java和Android中,我们可以这样做: 这样,在其他地方,我们就可以做到这一点: //编辑也许我应该说得更清楚些。我的意思是我们如何才能用Kotlin写上面的内容,用Kotlin。

  • 我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过

  • 问题内容: 在Scala中使用Java进行模拟的模拟方式是什么: 我特别希望我的内部类 不必 具有完全限定的名称-即,我不需要。因此,在Scala中,我想到的可能是这样的: 但这似乎不起作用:我的scala 似乎在课堂外都看不到。一种解决方案当然是: 这是确定-但因为我的课的名字,真是的“类型” 和实际上有一个很长的名字。所以: 这是冗长而可怕的。我可以替换为just,但是与它所关联的类之间没有明

  • 问题内容: 通常,在面向对象的范例中,静态方法只能访问静态变量和静态方法。如果是这样,那么就会出现一个明显的问题,即Java中的main()方法如何才能访问非静态成员(变量或方法),即使它特别是公共静态void … !!! 问题答案: main方法也无权访问非静态成员。

  • 我有以下设计,我想在Kotlin中实现: null 有没有更好的,更Kotlin的方法?