Scala 对象用法



是否可以在scala中根据条件公开类的功能?

class c(a: Int, b: Int){
if(a == 1){
val variable: Int = a
def function: Int = b
}

仅在使用类期间当 a 为 1 时才需要公开变量和函数

不可以,成员必须在编译时知道,以便编译器可以检查对成员的访问。

一种选择是使用Option

class c(a: Int, b: Int){
val variable = if (a==1) Some(a) else None
def function() = if (a==1) Some(f(b)) else None
}

您可以使用variable.getOrElse(default)c实例中提取variable

另一种选择是使用类层次结构

trait C
class B() extends C
class A(a: Int, b: Int) extends C {
val variable: Int = a
def function: Int = b
}
object C {
def apply(a: Int, b: Int): C =
if (a == 1) {
new A(a, b)
} else {
new B()
}
}

您可以使用C(...,...)创建实例,当您需要访问variable时,您可以使用match来检查您是否具有A而不是B的实例。

动态加载是可能的,但很少有用例认为这是正确的解决方案。

许多语言支持在运行时动态加载字节码的实际修改。主要用例是升级和修改无法停止或无法重新部署的应用程序。

最新更新