我在 Scala 中实现工厂设计模式,当我尝试访问子 class 方法时出现编译错误
I am implementing factory design pattern in Scala and got a compilation error when I tried to access a child class method
abstract class Computers{
def hdd:String
def RAM:String
def CPU:String
}
class PC(storage:String,memory:String,Cores:String) extends Computers{
def display:String="This is PC"
var device="PC"
def hdd={
"Hard disk"+" "+storage
}
def RAM={
memory
}
def CPU={
Cores
}
}
class LAPTOP(storage:String,memory:String,Cores:String) extends Computers{
def see:String={
"Hi All"
}
var device="Laptop"
def hdd={
storage
}
def RAM={
device +":" +memory+" RAM"
}
def CPU={
Cores
}
}
object Computers{
def apply(compType:String,storage:String,memory:String,Cores:String)={
compType match{
case "PC"=>new PC(storage:String,memory:String,Cores:String)
case "LAPTOP"=>new LAPTOP(storage:String,memory:String,Cores:String)
}
}
def main(args:Array[String]){
val c1=Computers("PC","1 TB","12 GB","5 GHz")
val c2=Computers("LAPTOP","1 TB","12 GB","5 GHz")
println(c1.display)
println(c1.hdd)
println(c2.RAM)
}
}
我正在尝试实施工厂设计模式。但是当我尝试调用子 class 方法(PC class 的显示方法)时出现以下编译错误:
'值显示不是 Computers 的成员'
有人可以帮助我为什么会收到错误
您收到此错误是因为当您使用 Computers
的 apply 方法时,您得到的类型 Computers
的实例没有定义 display
方法(如此仅在子类 PC
)
上定义
如果您想访问此方法,您将需要 PC
而不是 Computer
类型。您可以通过几种方式实现这一点,例如
- 使用 PC 的构造函数,这样你就有了一个类型 PC
- 模式匹配以确保
Computer
是 PC
- 使用
.asInstanceOf[PC]
以便您可以调用该方法(不推荐,因为如果您正在转换的内容实际上不是 PC
,这可能会在运行时失败
abstract class Computers{
def hdd:String
def RAM:String
def CPU:String
}
class PC(storage:String,memory:String,Cores:String) extends Computers{
def display:String="This is PC"
var device="PC"
def hdd={
"Hard disk"+" "+storage
}
def RAM={
memory
}
def CPU={
Cores
}
}
class LAPTOP(storage:String,memory:String,Cores:String) extends Computers{
def see:String={
"Hi All"
}
var device="Laptop"
def hdd={
storage
}
def RAM={
device +":" +memory+" RAM"
}
def CPU={
Cores
}
}
object Computers{
def apply(compType:String,storage:String,memory:String,Cores:String)={
compType match{
case "PC"=>new PC(storage:String,memory:String,Cores:String)
case "LAPTOP"=>new LAPTOP(storage:String,memory:String,Cores:String)
}
}
def main(args:Array[String]){
val c1=Computers("PC","1 TB","12 GB","5 GHz")
val c2=Computers("LAPTOP","1 TB","12 GB","5 GHz")
println(c1.display)
println(c1.hdd)
println(c2.RAM)
}
}
我正在尝试实施工厂设计模式。但是当我尝试调用子 class 方法(PC class 的显示方法)时出现以下编译错误: '值显示不是 Computers 的成员' 有人可以帮助我为什么会收到错误
您收到此错误是因为当您使用 Computers
的 apply 方法时,您得到的类型 Computers
的实例没有定义 display
方法(如此仅在子类 PC
)
如果您想访问此方法,您将需要 PC
而不是 Computer
类型。您可以通过几种方式实现这一点,例如
- 使用 PC 的构造函数,这样你就有了一个类型 PC
- 模式匹配以确保
Computer
是PC
- 使用
.asInstanceOf[PC]
以便您可以调用该方法(不推荐,因为如果您正在转换的内容实际上不是PC
,这可能会在运行时失败