自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala的泛型:最強(qiáng)大的特性

開發(fā) 后端
Scala創(chuàng)始人Martin Odersky曾說過,泛型正是他想要?jiǎng)?chuàng)建Scala語言的最重要因素之一。本文對(duì)Scala的泛型進(jìn)行了簡(jiǎn)單的介紹。
文源自Michel Schinz和Philipp Haller所寫的A Scala Tutorial for Java programmers,由Bearice譯成中文。第一篇為Scala簡(jiǎn)單做了一下入門,第二篇描述Scala對(duì)象,第三篇對(duì)Scala類做了一些介紹,第四篇介紹了Scala的模式匹配,第五篇則介紹Scala的Trait。下面是最后一部分,講述Scala的泛型。在Scala創(chuàng)始人Martin Odersky給51CTO的交流信件中他也提到過,說Scala的泛型是Scala最大的優(yōu)勢(shì)之一。

51CTO編輯推薦:Scala編程語言專題

8 Scala的泛型

我們?cè)谶@文章將要學(xué)習(xí)Scala的最后一個(gè)特性是泛型。Java程序員們可能最近才知道這個(gè)東西,因?yàn)檫@個(gè)特性是在Java1.5中才被加入的。

泛型是一種可以讓你使用類型參數(shù)的設(shè)施。例如當(dāng)一個(gè)程序員正在實(shí)現(xiàn)一個(gè)鏈表時(shí),將不得不面對(duì)諸如如何決定鏈表中節(jié)點(diǎn)保存數(shù)據(jù)的類型之類的問題。正由于這是一個(gè)鏈表,所以往往會(huì)在不同的環(huán)境中使用,因此,我們不能草率的決定節(jié)點(diǎn)數(shù)據(jù)類型,比如說Int。這種決定是相當(dāng)?shù)牟萋是揖窒扌缘摹?

以前Java程序員們通常使用Object,所有類型的超類,來解決問題。但是這種方法遠(yuǎn)遠(yuǎn)算不上是理想方案,例如他無法處理基本類型如int、long、float等(1.6中的autobox特性可以解決這個(gè)問題——譯者注),而且會(huì)讓使用者不得不使用大量的動(dòng)態(tài)類型轉(zhuǎn)換。

Scala中的泛型機(jī)制可以很輕松的解決這些個(gè)問題。來看下面這個(gè)最簡(jiǎn)單的容器類:一個(gè)引用,可以指向某個(gè)對(duì)象或者指向空。

class Reference[T] {
       
private var contents: T = _
       
def set(value: T) { contents = value }
       
def get: T = contents
}

Reference類具有一個(gè)叫做T的類型參數(shù)來表示他說引用的對(duì)象的類型。這個(gè)類型在Reference中作為了變量和函數(shù)的參數(shù)或者返回類型。

上面的代碼還演示了Scala中變量的表達(dá)方式,這個(gè)無需更多的解釋大家都能清楚。不過值得注意的是我們給他賦予的初始值:_ ,這個(gè)表示一個(gè)默認(rèn)值,對(duì)于數(shù)字類型來說是0,對(duì)于boolean來說是false,對(duì)于Unit(函數(shù)簽名)來說是() (無參數(shù)無返回),對(duì)于其他來說是null。

要使用這個(gè)Reference 類,你需要制定他的類型參數(shù),來告知這個(gè)引用到底引用了什么類型。例如要?jiǎng)?chuàng)建一個(gè)指向Int的引用,你可以這么寫:

object IntegerReference {
       
def main(args: Array[String]) {
                val cell
= new Reference[Int] cell.set(13)
                println
("Reference contains the half of " + (cell.get * 2))
       
}
}

就像我們看到的,我們不需要吧get的返回值強(qiáng)制轉(zhuǎn)換成Int,而且由于它被聲明成Int,你不可能在這個(gè)引用中放置其他類型的對(duì)象。

9 結(jié)語

本文簡(jiǎn)要介紹了Scala語言的一些特性,并且同時(shí)展示了若干實(shí)例。有興趣的讀者可以繼續(xù)閱讀本文的姊妹篇:《Scala By Example》,該文覆蓋了Scala的更多的高級(jí)特性。如果需要還可以去閱讀《Scala Language Specification》。

【相關(guān)閱讀】

  1. Scala的Trait:可以包含代碼的接口
  2. Scala的模式匹配和條件類
  3. Scala類:復(fù)數(shù)類,無參方法,繼承和覆蓋
  4. 萬物皆對(duì)象:介紹Scala對(duì)象
  5. Scala入門:Scala例子,以及如何與Java交互
責(zé)任編輯:yangsai 來源: Google Code
相關(guān)推薦

2021-02-08 11:20:27

Java類型數(shù)組

2020-02-21 08:18:58

JavaScala編程語言

2009-06-10 14:43:19

Scala泛型Scala編程語言

2014-04-15 16:01:00

Java8泛型

2021-09-29 18:17:30

Go泛型語言

2009-12-24 09:16:11

C#泛型

2022-03-28 08:36:15

tenacityPython

2009-08-24 17:07:09

C# 泛型

2021-05-10 07:38:09

Swift 泛型Tips

2021-01-14 05:20:48

Go語言泛型

2012-06-12 10:23:19

直流數(shù)據(jù)中心

2021-10-25 15:05:47

大數(shù)據(jù)貨幣大數(shù)據(jù)分析

2023-12-07 11:12:54

大型語言模型Gemini人工智能

2024-06-06 09:23:11

2021-06-17 06:51:32

Java泛型Java編程

2025-04-14 08:49:10

2017-03-06 16:51:52

Java泛型實(shí)現(xiàn)

2025-03-26 05:00:00

前端開發(fā)者DOM

2009-06-24 10:25:25

C#泛型

2009-08-24 14:43:35

C# 泛型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)