成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala的泛型:最強大的特性

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

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

8 Scala的泛型

我們在這文章將要學習Scala的最后一個特性是泛型。Java程序員們可能最近才知道這個東西,因為這個特性是在Java1.5中才被加入的。

泛型是一種可以讓你使用類型參數的設施。例如當一個程序員正在實現一個鏈表時,將不得不面對諸如如何決定鏈表中節點保存數據的類型之類的問題。正由于這是一個鏈表,所以往往會在不同的環境中使用,因此,我們不能草率的決定節點數據類型,比如說Int。這種決定是相當的草率且局限性的。

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

Scala中的泛型機制可以很輕松的解決這些個問題。來看下面這個最簡單的容器類:一個引用,可以指向某個對象或者指向空。

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

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

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

要使用這個Reference 類,你需要制定他的類型參數,來告知這個引用到底引用了什么類型。例如要創建一個指向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的返回值強制轉換成Int,而且由于它被聲明成Int,你不可能在這個引用中放置其他類型的對象。

9 結語

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

【相關閱讀】

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

2021-02-08 11:20:27

Java類型數組

2020-02-21 08:18:58

JavaScala編程語言

2009-06-10 14:43:19

Scala泛型Scala編程語言

2022-03-28 08:36:15

tenacityPython

2014-04-15 16:01:00

Java8泛型

2021-09-29 18:17:30

Go泛型語言

2009-08-24 17:07:09

C# 泛型

2021-05-10 07:38:09

Swift 泛型Tips

2009-12-24 09:16:11

C#泛型

2021-10-25 15:05:47

大數據貨幣大數據分析

2012-06-12 10:23:19

直流數據中心

2024-06-06 09:23:11

2023-12-07 11:12:54

大型語言模型Gemini人工智能

2021-01-14 05:20:48

Go語言泛型

2025-03-26 05:00:00

前端開發者DOM

2021-06-17 06:51:32

Java泛型Java編程

2025-04-14 08:49:10

2017-03-06 16:51:52

Java泛型實現

2009-06-24 10:25:25

C#泛型

2009-08-25 14:03:17

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区视频在线 | 国产午夜精品一区二区三区嫩草 | 久久五月婷 | av大片 | 九九亚洲精品 | 中文一区二区 | 免费视频久久久久 | 一区中文字幕 | 亚洲一区二区三区免费视频 | 久久久久久久久久一区二区 | 夜夜草av| 午夜精品久久久久久久 | 久久精品欧美一区二区三区不卡 | 欧美国产日韩在线 | 成人综合视频在线观看 | 欧美一区二区三区 | 亚洲免费人成在线视频观看 | 精品综合久久久 | 国产精品国产成人国产三级 | 国产精品久久国产精品 | 精品国产乱码久久久久久影片 | 国产二区av| 中国一级特黄真人毛片免费观看 | 99久久久无码国产精品 | 欧美黄色大片在线观看 | 欧美在线观看一区 | 国产精品亚洲第一 | 九九精品在线 | 一区二区免费在线观看 | 97caoporn国产免费人人 | 国产在线视频一区二区 | 欧美亚洲国产精品 | 国产资源一区二区三区 | 特黄毛片| 久久久久一区二区三区 | 黄色成人在线 | 国产精品一区二区久久精品爱微奶 | av三级在线观看 | 精品一区二区三区四区五区 | av在线三级| 日本三级全黄三级三级三级口周 |