共计 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)