Scala模拟表查询例子

来源:互联网 发布:扁平插画 知乎 编辑:程序博客网 时间:2024/06/06 18:59
package testtrait PartitionStrategy extends Serializable {  /** Returns the partition number for a given edge. */  def getPartition(key: Int): Int  def loadMetisFile()}object PartitionStrategy {    def fromString(s: String): PartitionStrategy = s match {    case "MetisPartition" => MetisPartition    case _ => throw new IllegalArgumentException("Invalid PartitionStrategy: " + s)  }         case object MetisPartition extends PartitionStrategy {      val metisMap =new scala.collection.mutable.HashMap[Int,Int]             def loadMetisFile() {        mockLoadFile()       }            def mockLoadFile() {      try {       var id = 1 ;       while(id < 10000)       {           var partition = 5 ;           metisMap.put(id, partition)           id = id +1        }       println("size: " + metisMap.size)    } catch  {       case ex: Exception => { // Handle missing file             ex.printStackTrace()       }      }  }         override def getPartition(src: Int): Int = {      var s = metisMap.get(src)      if(!s.isEmpty)      return s.getOrElse(0)      else        throw new IllegalArgumentException("Metis can't find partition!")    }  }}
package testobject TestPartition2 {       def main(args :Array[String]){     try {        val partitionStrategy = PartitionStrategy.fromString("MetisPartition")         partitionStrategy.loadMetisFile          println(partitionStrategy.getPartition(555))//     println(MetisPartitioner.getMetisPartition(1))     } catch {         case ex: Exception => {           ex.printStackTrace()          }     }    }

总结:trait有人说像接口,但我觉得更像抽象类, 此外,参考这个文档:

http://blog.csdn.net/wangxiaotongfan/article/details/48242029

注意几点: 

注意:object不能提供构造器参数,也就是说object必须是无参的




原创粉丝点击