Scala笔记(3)
隐式转换
需求:为一个已存在的类添加一个新的方法(类是第三方,并且你是拿不到源码的)
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)