多继承问题:

object LoadIssueDemo extends App {

  import java.io.PrintWriter

  trait Logger {
def log(msg: String): Unit
} trait FileLogger extends Logger {
val fileName: String
val fileOutput = new PrintWriter(fileName: String)
fileOutput.println("#") def log(msg: String): Unit = {
fileOutput.print(msg)
fileOutput.flush()
}
} class Person class Student(var name: String) extends Person with FileLogger {
override val fileName: String = "file.log" } new Student("Win").log("trait demo") }

运行结果:

原因:fileName还未初始化,就被方法调用。

解决方法:

1. 提前定义 (代码不够优雅)

object PreDefineDemo  extends App{
import java.io.PrintWriter trait Logger{
def log(msg: String): Unit
} trait FileLogger extends Logger {
val fileName: String
val fileOutput = new PrintWriter(fileName: String)
fileOutput.println("#") def log(msg: String): Unit ={
fileOutput.print(msg)
fileOutput.flush()
}
} class Person
class Student(var name: String) extends Person with FileLogger{
override val fileName: String = "file.log" } new { override val fileName: String = "file.log"} with Student("Win").log("trait demo") }

2. 懒加载(推荐)

object LazyLoadDemo extends App{
import java.io.PrintWriter trait Logger{
def log(msg: String): Unit
} trait FileLogger extends Logger {
val fileName: String
lazy val fileOutput = new PrintWriter(fileName: String) def log(msg: String): Unit ={
fileOutput.print(msg)
fileOutput.flush()
}
} class Person
class Student(var name: String) extends Person with FileLogger{
override val fileName: String = "file.log" } val s = new Student("Win")
s.log("#")
s.log("Lazy demo") }

最新文章

  1. 初学者-PHP笔记
  2. ipad
  3. 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
  4. smdkv210
  5. SQLServer异常捕获
  6. RESTful API 设计最佳实践(转)
  7. Android之提交数据到服务端方法简单封装
  8. C语言随笔_区分=与==
  9. php读取excel文档内容(转载)
  10. Cookie禁用 获取session
  11. A.01.11—模块的输出—输出复用和可配
  12. Hadoop学习笔记(五):java开发MapReduce
  13. new Vue 发生了什么
  14. https://github.com/Lushenggang/show-pdf在线浏览pdf文件在线浏览pdf文件
  15. ASP.NET 之 MVC框架及搭建
  16. SpringData修改和删除操作
  17. eigen安装
  18. leetcode-209-长度最小的子数组
  19. java基本编译
  20. 浅谈ES6基础——Promise

热门文章

  1. codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)
  2. CF1027C Minimum Value Rectangle 贪心 数学
  3. yzoj P2344 斯卡布罗集市 题解
  4. 基于WFST的语音识别解码器
  5. 从SpringBoot构建十万博文聊聊Tomcat集群监控
  6. 《2019面向对象程序设计(java)课程学习进度条》
  7. 网络流---最大流(Edmond-Karp算法)的学习
  8. iOS组件化实践
  9. mybatis plus使用redis作为二级缓存
  10. 实现一个简易版的vuex持久化工具