Kotlin抽象工厂模式创建对象报错:Unexpected tokens,求解决
Kotlin抽象工厂模式报错解决:
Unexpected tokens (use ';' to separate expressions on the same line) 问题原因
你在main函数里的对象创建语法完全错误。Kotlin中声明变量并实例化对象的正确格式是:
- 隐式推导类型:
val 变量名 = 构造函数() - 显式指定类型:
val 变量名: 类型 = 构造函数()
而你写成了val samsungMobilePhone: Samsung(),把类型声明和构造调用混在一起,编译器无法识别,所以抛出语法错误。
修复后的完整代码
object AAbstractFactoryDesignPattern{ internal interface IAndroid{ fun GetModelDetails(): String } internal interface IiOS{ fun GetModelDetails(): String } internal interface IMobile{ fun GetAndroidPhone() : IAndroid fun GetiOsPhone() : IiOS } internal class SamsungGalaxy : IAndroid{ override fun GetModelDetails(): String { return "Model: Samsung Galaxy - RAM: 2GB - Camera: 13MP" } } internal class IphoneFour: IiOS{ override fun GetModelDetails(): String { return "Model: Iphone 4 - RAM: 1GB - Camera: 12MP" } } internal class Samsung : IMobile{ override fun GetAndroidPhone(): IAndroid { return SamsungGalaxy() } override fun GetiOsPhone(): IiOS { return IphoneFour() } } internal class MobileClient(factory: IMobile){ var androidPhone: IAndroid var iOSPhone: IiOS fun GetAndroidPhoneDetails(): String{ return androidPhone.GetModelDetails() } fun GetIOSPhoneDetails(): String{ return iOSPhone.GetModelDetails() } init { androidPhone = factory.GetAndroidPhone() iOSPhone = factory.GetiOsPhone() } } @JvmStatic fun main(args : Array<String>){ // 修复后的对象创建语法 val samsungMobilePhone = Samsung() val samsungClient = MobileClient(samsungMobilePhone) println(samsungClient.GetAndroidPhoneDetails()) println(samsungClient.GetIOSPhoneDetails()) } }
额外建议(非强制,符合Kotlin社区规范)
Kotlin通用命名规范能让代码更易读:
- 函数名用小驼峰:比如把
GetModelDetails改成getModelDetails - 接口名通常不用
I前缀:比如IAndroid可改为Android,IMobile改为MobileFactory(更清晰体现抽象工厂的角色) - 类名保持大驼峰(你这部分符合规范)
内容的提问来源于stack exchange,提问作者Abisheik Meenakshi Sundaram
相关产品推荐
相关产品推荐

