Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
如何在 Java App 中導入 Scala @ JavaTWO 2011
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Brian Hsu
July 29, 2011
Programming
140
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
如何在 Java App 中導入 Scala @ JavaTWO 2011
Java / Scala interaction presentation @ JavaTwo 2011 Conference.
Brian Hsu
July 29, 2011
More Decks by Brian Hsu
See All by Brian Hsu
我如何停止憂慮並愛上 Non-MVC Web Framework @ OSDC.tw 2013
brianhsu
6
3.3k
數位典藏聯合目錄搜尋引擎模組
brianhsu
0
210
Java XML Processing
brianhsu
0
92
Java Unicode NCR 處理
brianhsu
1
440
[LT] 自由軟體讓你五分鐘上新聞 @ OSDC.tw 2011
brianhsu
1
110
ScalaTest-連貓都會的單元測試與 BDD @ COSCUP 2010
brianhsu
0
300
Introduction to Scala @ TWJUG 2010/07
brianhsu
1
200
Programming Android Application in Scala @ OSDC.tw 2010
brianhsu
1
130
Other Decks in Programming
See All in Programming
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
560
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
170
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
190
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
320
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
5.1k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
550
setup-vp GitLab対応の裏側
naokihaba
0
140
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
390
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
420
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
230
スマート反転とウェブアクセシビリティ
camiha
0
220
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Making Projects Easy
brettharned
120
6.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Done Done
chrislema
187
17k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Transcript
如何在 如何在 Java App Java App 中導入 中導入 Scala Scala
Brian Hsu Brian Hsu
2 About Me • 許洛豪 (BrianHsu) • 經歷 – 華寶通訊
Android 手機工程師 – 中研院數位典藏成果入口網技術發展組 • 演講 – OSDC.tw 2010 – COSCUP 2010
3 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
4 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
5 Scala 是什麼? • 執行在 JVM 上的程式語言 • 靜態型別的語言 •
支援物件導向及 Functional Programming 的多典範程式語言
6 Scala 的特色 • 設計上就不把 Java 語法相容考慮進去 • 靜態/強型別的 JVM
程式語言 – vs Grovvy/JRuby/Clojure...etc. • 編譯式的程式語言 – 編譯成 JVM Bytecode – 也就是 .class 檔 • 提供 REPL / Script 模式
7 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
8 簡單省事 Java 討人厭的地方都被修正了
9 Scala 幫你省事的部份 • Everything is Object • Type Inference
• Unchecked Exception
10 Everything is Object
11 Type Inference
12 Unchecked Exception
13 Scala 的特異功能 • Singleton • Tuple • Case Class
• Operator is Method • Pattern Matching • Collection / High-order Function / Closure • Trait
14 Singleton
15 Tuple
16 Tuple
17 Case Class
18 Operator is Method
19 Operator is Method
20 Pattern Matching
21 Pattern Matching
22 Pattern Matching
23 Collection
24 High-Order Function / Closure
25 Trait • 貓狗魚鳥都是動物,但可以做不同的動作 – 四種都會吃東西 – 貓和狗會走路 – 魚會游泳但不會走路也不會飛
– 鳥會走路、會飛但不會游泳
26 Java Interface
27 Trait • 沒有實作任何 Method 的 Trait – 等價於 Java
的 Interface • 有實作的 Trait
28 Trait
29 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
30 What could I do? • Java Legacy Code –
REPL 實驗 • Unit Test – ScalaTest (http://www.scalatest.org/) • Prototyping
31 Java / Scala 混合專案流程 Java Java 原始檔 原始檔 Java
Java 編譯器 編譯器 Java .class Java .class Bytecode Bytecode 檔案 檔案 Java Java Virtual Machine Virtual Machine JAR JAR 檔 檔 執行 執行
32 Java / Scala 混合專案流程 Java Java 原始檔 原始檔 Java
Java 編譯器 編譯器 Java .class Java .class Bytecode Bytecode 檔案 檔案 Java Java Virtual Machine Virtual Machine JAR JAR 檔 檔 執行 執行 Scala Scala 原始檔 原始檔 Scala Scala 編譯器 編譯器
33 Scala/Java 相互參照
34 Scala/Java 相互參照 1.scalac -d classes/ iis/*.java iis/*.scala 2.javac -cp
'classes/:/usr/share/scala/lib/*' -d classes/ iis/*.java
35 IDE Tools • Scala IDE for Eclipse – http://www.scala-ide.org/
• IntelliJ IDEA – http://www.jetbrains.com/idea/
36 Command Line Tool • SBT (Simple Build Tool) –
http://code.google.com/p/simple-build-tool – 類似 Maven/Ant ,但和 XML 說再見 – 可以使用 Maven Repository 裡的函式庫 – 自動處理相依性和 Java/Scala 混合編譯的問題
37 Project Layout 不在 Maven 裡的 JAR 檔 Java 原始碼
Scala 原始碼 Unit Test
38 Maven Repository • project/build/TestProject.scala
39 SBT Commands • reload • update • compile •
run • console • test • exit
40 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
41 Accessing Java Code Base • Scala 可以直接使用絕大多數的 Java 程式
• 預設 Import – java.lang.*
42 Accessing Java Code Base
43 Java ↔ Scala Collection
44 Java ↔ Scala Collection
45 Implicit Conversions
46 Implicit Conversions
47 Implicit Conversion
48 剩下的一小部份
49 BeanProperty Annotation • 自動產生 JavaBean 的 Getter / Setter
• scala.reflect package – @BeanProperty • getXXXX() • setXXXX() – @BooleanBeanProperty • IsXXXX() • setXXXX()
50 BeanProperty Annotation
51 Java Static Protected Member • Scala 沒有 static 的概念
• 所有的函式/成員必定屬於某個特定物件 – Singleton 物件 • 語意無法表達 protected static 成員
52 Java Static Protected Member
53 Java Static Protected Member
54 Java Static Protected Member
55 Java Static Protected Member
56 Type Inference • Scala 的 Type Inference 並不完美 –
特別是在泛型和處理基本資料型態時 – 可以使用 .asInstanceOf[T] 來強制轉型 • 例: – (1.5).asInstanceOf[java.lang.Double] – 1.asInstanceOf[java.lang.Integer]
57 Raw Types
58 Raw Types
59 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
60 沒有用到 Scala 特異功能的都可以直接使用
61 Accessing Scala Code Base
62 Tools • scalac -print – 將 Scala 的特殊語法轉成 Java
可表達的語法 – 例如:將 Pattern Matching 轉成 if/else • javap – 因為 Scala 編譯出的是標準的 JVM Bytecode ,可以使用此程式觀看 Scala 產出的 .class 檔的結構
63 Singleton Object
64 Singleton Object
65 Singleton Object
66 Singleton Object
67 Tuple • 總共有 N 個類別 – scala.Tuple2[T1, T2] –
scala.Tuple3[T1, T2, T3] – …. • 唯讀的 Immutable Object • 可以直接在 Java 中使用 – 基本資料型態以 java.lang.Object 做為 T
68 Tuple
69 Tuple
70 Tuple
71 High-Order Function • 一樣有 N 個 Trait – scala.Function1[T1,
R] – scala.Function2[T1, T2, R] – …. • 類別中的 apply(T1 v1, T2 v2) 方法即為 函式主體
72 High-Order Function • 於 Java 中使用 – scala.runtime.AbstractFunctionN –
覆寫 apply() 方法 – 基本資料型態改用 Object 做型態參數
73 High-Order Function
74 High-Order Function
75 Operator Overloading • Scala 中的 Method 可以用 Operator 當做
名稱,以此達成 Operator Overloading • Java / JVM 中的 Identifier 名稱規範 – Scala 在編譯時期將 Operator 轉成符合 JVM 規範的 Identifier – 使用 javap 可以看實際上該 Method 的名稱
76 Operator Overloading
77 Operator Overloading
78 Trait
79 Trait
80 Agenda • Scala 是什麼? • 為什麼使用 Scala ? •
Java / Scala 混合專案流程與工具 • Call Java from Scala • Call Scala from Java • Conclusion
81 Conclusion • Scala 可以幫助你更快地開發程式 • Scala 可以幾乎是無痛地整合至 Java 程式
• 特別適合用在以下兩種狀況 – Unit Test – Prototyping
82 Thanks! Enjoy Programming!