scala 與 java泛型數(shù)組

java 泛型數(shù)組初始化

public class GenericArray<T> {

    private T[] arr;

    public GenericArray(){
        arr = new T[10]; //編譯錯(cuò)誤
    }

}

使用這樣的方式初始化java的數(shù)組會(huì)出錯(cuò)哺壶,因?yàn)閖ava不支持泛型數(shù)組变骡。按照我的理解芭逝,java 初始化數(shù)組時(shí)候旬盯,需要知道數(shù)組的確切類型台妆,但是泛型是編譯后擦除的。所以運(yùn)行時(shí)胖翰,無(wú)法知道數(shù)組的確切類型接剩。所以java不支持以 new T[] 方式初始化一個(gè)數(shù)組。

如果想進(jìn)行初始化萨咳,可以通過(guò)這樣的方式

T[] arr=(T[]) new Object[10];

scala的泛型數(shù)組

那么同樣的場(chǎng)景懊缺,在scala中如何實(shí)現(xiàn)呢

class ScalaGenericArray[T]{
  val arr: Array[T] = new Array[T](10)
}

object ScalaGenericArray{
  def main(args: Array[String]): Unit = {
    val arr = new ScalaGenericArray[String]
  }
}

看起來(lái)很自然,但是在運(yùn)行時(shí)候會(huì)報(bào)錯(cuò):

Error:(9, 23) cannot find class tag for element type T
val arr: Array[T] = new Array[T](10)

原因和java的一樣培他,虛擬機(jī)中鹃两,泛型相關(guān)的類型信息會(huì)被擦除,所以無(wú)法將T解釋成實(shí)際類型String

那么如何做呢舀凛,此處我們需要將類型的信息以一個(gè)參數(shù)的方式傳進(jìn)去

class ScalaGenericArray[T](implicit classTag:ClassTag[T] ){ //讓編譯器幫我們傳入類型信息

  val arr: Array[T] = new Array[T](10)

}

object ScalaGenericArray{
  def main(args: Array[String]): Unit = {
    val arr = new ScalaGenericArray[String]
  }
}
  1. 感覺這種方式有點(diǎn)類似于java為了獲取一個(gè)泛型的信息俊扳,將類以參數(shù)的形式傳入函數(shù)參數(shù)中
public <T> T test(Class<T> clazz) {
        System.out.println(clazz);
        //...
}
  1. 當(dāng)然此處的ClassTag也可以使用Manifest,但是在scala 2.10.0后就不推薦使用了

  2. 這樣寫比較復(fù)雜猛遍,scala也提供另一種簡(jiǎn)單的方式,上下文界定

class ScalaGenericArray[T: ClassTag] {//此處不再需要提供參數(shù)
  val arr: Array[T] = new Array[T](10)
}

object ScalaGenericArray {
  def main(args: Array[String]): Unit = {
    val arr = new ScalaGenericArray[String]
  }
}

這是scala的語(yǔ)法糖,T:ClassTag 告訴scala存在一個(gè)類型為ClassTag[T] 的隱式參數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市代箭,隨后出現(xiàn)的幾起案子嗡综,更是在濱河造成了極大的恐慌驾茴,老刑警劉巖晨缴,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稍途,死亡現(xiàn)場(chǎng)離奇詭異装盯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門拗引,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)豁护,“玉大人,你說(shuō)我怎么就攤上這事班缎〕煤模” “怎么了对粪?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵乳蛾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹦魔,這世上最難降的妖魔是什么低缩? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任么介,我火速辦了婚禮,結(jié)果婚禮上纳胧,老公的妹妹穿的比我還像新娘摧找。我一直安慰自己,他們只是感情好惩系,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布晤柄。 她就那樣靜靜地躺著妖胀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闯估。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天邦邦,我揣著相機(jī)與錄音薪韩,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谊路,可吹牛的內(nèi)容都是我干的耙旦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼噩茄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼机杜!你這毒婦竟也來(lái)了怨规?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拙徽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诅诱,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遏餐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡延刘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出审编,到底是詐尸還是另有隱情撼班,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布垒酬,位于F島的核電站砰嘁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伤溉。R本人自食惡果不足惜般码,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乱顾。 院中可真熱鬧板祝,春花似錦、人聲如沸走净。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伏伯。三九已至橘洞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間说搅,已是汗流浹背炸枣。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弄唧,地道東北人适肠。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像候引,于是被迫代替她去往敵國(guó)和親侯养。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 泛型是Java 1.5引入的新特性澄干。泛型的本質(zhì)是參數(shù)化類型逛揩,這種參數(shù)類型可以用在類柠傍、變量、接口和方法的創(chuàng)建中辩稽,分別...
    何時(shí)不晚閱讀 3,026評(píng)論 0 2
  • object 變量可指向任何類的實(shí)例惧笛,這讓你能夠創(chuàng)建可對(duì)任何數(shù)據(jù)類型進(jìn)程處理的類。然而逞泄,這種方法存在幾個(gè)嚴(yán)重的問(wèn)題...
    CarlDonitz閱讀 910評(píng)論 0 5
  • 本文大量參考Thinking in java(解析徐紧,填充)。 定義:多態(tài)算是一種泛化機(jī)制炭懊,解決了一部分可以應(yīng)用于多...
    谷歌清潔工閱讀 457評(píng)論 0 2
  • 前言 人生苦多,快來(lái) Kotlin 拂檩,快速學(xué)習(xí)Kotlin侮腹! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,161評(píng)論 9 118
  • 有人說(shuō)家是溫暖的港灣……有人說(shuō)家是磨難的起源 每個(gè)人對(duì)家的概念不一樣 在我眼里~家就是碰到困難就可以躲避~別人都說(shuō)...
    漂浮的孤舟閱讀 402評(píng)論 0 0