zoukankan      html  css  js  c++  java
  • scala中隐式转换之隐式类

    /**
      * Created by root
      * Description :隐式类:
      * 1.其所带的构造参数有且只能有一个;并且构造器的参数是转换之前的对象
      * 2.隐式类必须被定义在类,伴生对象和包对象里
      * 3.隐式类不能是case class(case class在定义会自动生成伴生对象与2矛盾)
      * 4.作用域内不能有与之相同名称的标示符
      */
    
    class ImplicitTest3 {
        def getName = "ImplicitTest3"
    }
    
    object ImplicitUtils {
      implicit class StringImprovement(val s : String){   //隐式类
        def increment = s.map(x => (x +1).toChar)
        def toMore = (s.length,s.substring(1,3),s.contains("a"))
      }
    
      implicit class IntImprovement(val a : Int){   //隐式类
        def square = a * a
        def cube = a * a * a
      }
    
      implicit class ImplicitTest3Improvement(val im : ImplicitTest3){   //隐式类
        def getImName = im.getName
      }
    }
    object  Main extends  App{
      import ImplicitUtils._
      println("hello".increment)  // 编译器在hello对象调用increment时发现对象上并没有increment方法,此时编译器就会在作用域范围内搜索隐式实体,
                                  // 发现有符合的隐式类可以用来转换成带有increment方法的StringImprovement类,最终调用increment方法。
      println("hello".toMore)
      println(2.square)
      println(3.cube)
    
      val im = new ImplicitTest3
      println(im.getImName)
    }
  • 相关阅读:
    python子网拆分IP段
    动画制作库tween样例学习
    npm淘宝镜像
    nodejs webpack json 大文件,编译,out of memory
    python处理经过gzip压缩的网页内容
    判断百度某一经纬度的地图颜色值python
    考试总结及注意事项
    2152:聪聪可可(点分治)
    3687: 简单题(bitset)
    4514: [Sdoi2016]数字配对
  • 原文地址:https://www.cnblogs.com/xubiao/p/8000376.html
Copyright © 2011-2022 走看看