Scala笔记3

58次阅读

共计 1905 个字符,预计需要花费 5 分钟才能阅读完成。

隐式转换

需求:为一个已存在的类添加一个新的方法(类是第三方,并且你是拿不到源码的)

object ImplicitApp extends App {

implicit def man2Super(man: Man): Superman = new Superman(man.name)
val man = new Man(“tracy”)
man.canFly()

}

class Man(val name:String){
def eat(name:String): Unit ={

println(s"Man $name is eating...")

}
}

class Superman(val name:String){
def canFly(): Unit ={

println(s"Superman $name is flying...")

}
}
步骤:直接 implicit 关键字 加上 def 定义一个隐式转换的方法,把要转换的当参数穿进去,返回值为转换后的对象
案例 2:为 java.io 里添加一个 read 方法
// 先定义 RichFile class 确定要转换后的效果,然后定义 implicit 进行转换过程
implicit def file2RichFile(file: File): RichFile = new RichFile(file)
val file = new File(“C:\Users\TracyChen\Desktop\Higher.txt”)
file.read()

class RichFile(val file:File){
def read(): Unit = {

println(scala.io.Source.fromFile(file).mkString)

}
}

操作外部数据
(文件)

val file=Source.fromFile("C:\\Users\\TracyChen\\Desktop\\Higher.txt")
// 读取一整行
def readLine()={for (line <- file.getLines()){println(line)
  }
}
// 读取字节
def readChar(): Unit = {for(ele <- file){println(ele)
  }
}

(MySQL)
val url = “”
val username = “”
val password = “”

classOf[driver address]
var connection: Connection = null
try {

connection = DriverManager.getConnection(url)
val statement  = connection.createStatement()
val resultSet = statement.executeQuery("")
while (resultSet.next()){val host = resultSet.getString("host")
  val user = resultSet.getString("user")
  println(s"$host : $user")
}

}catch {

case e:Exception => e.printStackTrace()

}finally {

if (connection == null) {connection.close()
}

}

正常来说生产上面都是要有数据库连接池的,需要创建 connection 都是去连接池取,然后 close 的时候直接放回连接池就可以

(XML)
val xml =XML.load(this.getClass.getClassLoader.getResource(“test.xml”))
println(xml)
如果要看 xml 里 header 标签下的东西,就用 val headerxml = xml “header”
如果要看 xml 里全局所有 field 的内容,就用 val allFields = xml \ “fields”

                              for(field: fields)
                                  println(field)
                                  

看 header 标签下,name属性 里的内容,两种方法:

1. xml1 = (xml \ "header").**map(_ \ @name)**
2. xml2= (xml \ "header" \\ "@name")

看 header 标签下,name 属性里是不是有一个叫 name = “tracy” 的内容:

val filter = (xml \\ "header").
filter(_.attribute("name").exists(_.text.equals("tracy"))

看 header 标签下,filed 标签下的内容:
(xml \ “header” \ “filed”)
.map(x => (x “@name”, x.text, x “@required”))
.foreach(println)

正文完
 0