第42回:Scalaにおける汎用クラス、汎用関数、汎用のSparkにおける広範な応用
1418 ワード
汎用:一般的には、関数を定義する必要があります.関数のパラメータは任意のタイプを受け入れることができます.すべてのパラメータタイプリロード(overload)関数を一つ一つ列挙することはできない.
プログラムは汎用と呼ばれるものを導入し,このタイプは任意のデータ型を表すことができる.
例えば、Listは、Listの作成時に、×××、文字列、浮動小数点数など任意のタイプ.それはリストがクラス定義時に汎用型を参照しているためである.
Listの定義
ここでAはタイプです.もちろんAは任意の識別子で書くことができます.
汎用はクラスと関数に適用され、コードの例は次のとおりです.
プログラムは汎用と呼ばれるものを導入し,このタイプは任意のデータ型を表すことができる.
例えば、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)))
}
}