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)
    }
  • 相关阅读:
    Beginning Auto Layout Tutorial in iOS 7: Part 2
    Beginning Auto Layout Tutorial in iOS 7: Part 1
    Autolayout 03
    Autolayout 02
    Autolayout 01
    Start Developing iOS Apps Today
    Spring 7大功能模块的作用
    struts2入门
    myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
    第十一章 Servlet MVC模式
  • 原文地址:https://www.cnblogs.com/xubiao/p/8000376.html
Copyright © 2011-2022 走看看