Scala隐式转换

加强类 

package com.ws.myimplicit

import java.io.File

import scala.io.Source

/**
 * File有很多方法
 * 现在想给File再加一个read方法
 * 之前java的解决办法,创建一个RichFile,在类构造方法中传入一个file,其中有个方法 read(),在这个方法里拿到传入的
 * file做read方法加强 然后RichFile(file).read();
 * 但是就不是创建之前的哪个类了。SCALA的隐式转换可以完美解决这个问题
 * 和java的处理方式一致
 * 创建一个RichFile,在类构造方法中传入一个file,其中有个方法 read(),
 * 然后创建一个隐式转换类,在其中创建一个方法,这个方法传入一个File 返回一个 Richfile
 *
 * 程序在编译时,如果发现一个类调用了不是自己类中的方法[read()],它不会接着报错,而是在上下文中,找有没有一个
 * 方法或这函数---《将该类转换为其他类》,而且其他类中有刚才哪个方法read()(返回类型和参数值一致),
 * 那它再调用read()方法之前, 会先调用一下这个转换方法。最重要的是这个转换方法是被implicit修饰的
 *
 * @param file
 */
// 导入隐式转换方法
import RichFileImplicit.fileToRichFile

class RichFile(file:File) {
  def read() :String = {
    Source.fromFile(file).mkString
  }
}

object RichFile{
  def main(args: Array[String]): Unit = {
    val file = new File("C:/Users/Wsong/Desktop/debug.log")
//    val str = new RichFile(file).read()
    val str = file.read()
    println(str)
  }
}

隐式转换函数 

package com.ws.myimplicit

import java.io.File

object RichFileImplicit {
  implicit def fileToRichFile(file: File):RichFile = {
    new RichFile(file)
  }
}

总结

总之,如果想做类加强,就是创建一个新的类,再新的类中创建一个构造器接收原来的类,再新增一个加强方法,这个加强方法就是你想在原来的类中实现的方法,然后创建一个隐式转换方法或函数,并导入隐式转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值