RT, 希望实现子类对象Map查询.
package testtrait PartitionStrategy extends Serializable {
  /** Returns the partition number for a given edge. */
  def getPartition(key: Int): Int
}   case object MetisPartition extends PartitionStrategy {
      val metisMap =new scala.collection.mutable.HashMap[Int,Int] 
 
      def this(xc:Int) {
       this(xc,0)   //这里为什么编译报错?
       println("Constructor! ")
       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.hashCode())
      if(!s.isEmpty)
      return s.getOrElse(0)
      else
        throw new IllegalArgumentException("Metis can't find partition!")
    }
    
     def main(args :Array[String]){
     try {
          val partitionStrategy = new PartitionStrategy  ////这里应该如何定义? 编译不过去
          println(partitionStrategy.getPartition(110))
     } catch {
         case ex: Exception => {
           ex.printStackTrace() 
         }
     } 
   }
  }
   
   

解决方案 »

  1.   

    RT, 希望实现子类对象的MAp查询, 快被scala的语法搞疯了,过于简洁了,各种不习惯!!!!!!!!!!!
      

  2.   

    简单的说,我的问题是,一个对象继承了 trait后,如果想在该对象初始化的时候进行一些操作,如何编写构造函数?
      

  3.   

    trait相当于虚类,当然不能new了,要new也是子类。MetisPartition的默认构造函数给入参数为0,楼主的this却给了两个参数,所以编译报错。
    要写scala,就离java远点,可以借鉴思想,但不能借鉴语法结构