第42回:Scalaにおける汎用クラス、汎用関数、汎用のSparkにおける広範な応用


汎用:一般的には、関数を定義する必要があります.関数のパラメータは任意のタイプを受け入れることができます.すべてのパラメータタイプリロード(overload)関数を一つ一つ列挙することはできない.
プログラムは汎用と呼ばれるものを導入し,このタイプは任意のデータ型を表すことができる.
例えば、Listは、Listの作成時に、×××、文字列、浮動小数点数など任意のタイプ.それはリストがクラス定義時に汎用型を参照しているためである.
Listの定義
sealed abstract class List[+A] extends AbstractSeq[A]
                                  with LinearSeq[A]
                                  with Product
                                  with GenericTraversableTemplate[A, List]
                                  with LinearSeqOptimized[A, List[A]]
                                  with Serializable

ここでAはタイプです.もちろんAは任意の識別子で書くことができます.
汎用はクラスと関数に適用され、コードの例は次のとおりです.
package com.dt.scala.type_parameterization
//    F,S,T    ,       
class Triple[F,S,T](first: F,second: S,third: T)

object Hello_type_parameterization {
  def main(args: Array[String]): Unit = {
    //      ,        String、Int、Double
    val triple1 = new Triple("Spark",3,3.14) 
    //   ,       ,                   。
    //            
    val triple2 = new Triple[String,String,String]("Spark","Scala","Kafka")
    //new    ,    。       ,        
    
    //     
    //       ,      List       
    def getData[T](l: List[T])={
      l.take(l.length/2)
    }
    println(getData(List("a","b","c")))
    println(getData(List(1,2,3,4,5,6)))
    
  }
}