是否可以在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
的实例。
动态加载是可能的,但很少有用例认为这是正确的解决方案。
许多语言支持在运行时动态加载字节码的实际修改。主要用例是升级和修改无法停止或无法重新部署的应用程序。