• scala一些高级类型


    package com.ming.test
    
    import scala.collection.mutable.ArrayBuffer
    import scala.io.Source
    import java.awt.image.BufferedImage
    import javax.imageio.ImageIO
    import java.io.File
    
    
    /**
     * 高级类型
     */
    //单例类型,链式调用
    class Document{
      def setTitle(title:String)={this}
      def setAuthor(author:String)={this}
    }
    
    class Book extends Document{
      def addBook(name:String):this.type={this}
    }
    
    //类型投影
    class NetWork{
      class Member(val name:String){
        val contacts=new ArrayBuffer[Member]
      }
      private val members=new ArrayBuffer[Member]
      def join(name:String)={
        val m=new Member(name)
        members+=m
        m
      }  
    }
    
    //定义Person类,两个泛型参数,分别是S,T,因此
    //它是可以用中置表达式进行变量定义的
    case class Person[S,T](val name:S,val age:T)
    //中置类型-中置类型是代表带有两个参数的类型
    class ZhongziType{
      //下面的代码是一种中置表达方法,相当于
      //val p:Person[String,Int]
      val p:String Person Int= Person("摇摆少年梦",18)
    }
    
    //抽象类型--类或特质可以定义一个在子类中被具体化的抽象类型
    trait Reader{
      type Contents
      def read(fileName : String):Contents
    }
    
    trait Reade1r[T]{
       def read(fileName : String):T
    }
    
    //类型Contents是抽象的。具体的子类需要指定这个类型
    class StringReader extends Reader{
      type Contents=String
       def read(fileName : String)=Source.fromFile(fileName,"UTF-8").mkString
    }
    
    class ImageReader extends Reader{
      type Contents=BufferedImage
      def read(fileName :String)=ImageIO.read(new File(fileName))
    }
    
    
    //
    
    object SeniorTypeTest {
      
      def main(args: Array[String]): Unit = {
        var d=new Book
        var s=d.setAuthor("a").setTitle("hello");
        println(s)
        var b=new Book
        b.addBook("<<helloworld>>").setAuthor("mingge").setTitle("hello")
        println(b)
      }
    }

    感觉scala好多规则,好晕好绕。。。

  • 相关阅读:
    Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)
    dmalloc arm-linux平台使用
    dmalloc在嵌入式的开发板上的应用
    利用linux的mtrace命令定位内存泄露(Memory Leak)
    Linux C 编程内存泄露检测工具(一):mtrace
    Ubuntu10.04下安装Qt4和创建第一个Qt程序
    UBuntu14.04下安装和卸载Qt5.3.1
    MinGW 与MSVC的区别
    Qt5 编译 & 打包依赖dll发布
    查看gcc/g++默认include路径
  • 原文地址:https://www.cnblogs.com/huzi007/p/6159955.html
Copyright © 2020-2023  润新知