狠狠撸

狠狠撸Share a Scribd company logo
如何在 Java App 中導入 Scala

        Brian Hsu
About Me
? 許洛豪 (BrianHsu)
? 經歷
    – 華寶通訊 Android 手機工程師
    – 中研院數位典藏成果入口網技術發展組
? 演講
    – OSDC.tw 2010
    – COSCUP 2010



2
Agenda
?   Scala 是什麼?
?   為什麼使用 Scala ?
?   Java / Scala 混合專案流程與工具
?   Call Java from Scala
?   Call Scala from Java
?   Conclusion



3
Agenda
?   Scala 是什麼?
?   為什麼使用 Scala ?
?   Java / Scala 混合專案流程與工具
?   Call Java from Scala
?   Call Scala from Java
?   Conclusion



4
Scala 是什麼?
? 執行在 JVM 上的程式語言
? 靜態型別的語言
? 支援物件導向及 Functional Programming
  的多典範程式語言




5
Scala 的特色
? 設計上就不把 Java 語法相容考慮進去
? 靜態/強型別的 JVM 程式語言
    – vs Grovvy/JRuby/Clojure...etc.
? 編譯式的程式語言
    – 編譯成 JVM Bytecode
    – 也就是 .class 檔
? 提供 REPL / Script 模式


6
Agenda
?   Scala 是什麼?
?   為什麼使用 Scala ?
?   Java / Scala 混合專案流程與工具
?   Call Java from Scala
?   Call Scala from Java
?   Conclusion



7
简单省事
    Java 討人厭的地方都被修正了




8
Scala 幫你省事的部份
? Everything is Object
? Type Inference
? Unchecked Exception




9
Everything is Object




10
Type Inference




11
Unchecked Exception




12
Scala 的特異功能
 ?   Singleton
 ?   Tuple
 ?   Case Class
 ?   Operator is Method
 ?   Pattern Matching
 ?   Collection / High-order Function / Closure
 ?   Trait

13
Singleton




14
Tuple




15
Tuple




16
Case Class




17
Operator is Method




18
Operator is Method




19
Pattern Matching




20
Pattern Matching




21
Pattern Matching




22
Collection




23
High-Order Function / Closure




24
Trait
 ? 貓狗魚鳥都是動物,但可以做不同的動作
     – 四種都會吃東西
     – 貓和狗會走路
     – 魚會游泳但不會走路也不會飛
     – 鳥會走路、會飛但不會游泳




25
Java Interface




26
Trait
 ? 沒有實作任何 Method 的 Trait
     – 等價於 Java 的 Interface
 ? 有實作的 Trait




27
Trait




28
Agenda
 ?   Scala 是什麼?
 ?   為什麼使用 Scala ?
 ?   Java / Scala 混合專案流程與工具
 ?   Call Java from Scala
 ?   Call Scala from Java
 ?   Conclusion



29
What could I do?
 ? Java Legacy Code
     – REPL 實驗
 ? Unit Test
     – ScalaTest (http://www.scalatest.org/)
 ? Prototyping




30
Java / Scala 混合專案流程
     Java 原始檔    Java 編譯器




                 Java .class
                Bytecode 檔案




                     Java
      執行                          JAR 檔
                Virtual Machine

31
Java / Scala 混合專案流程
     Java 原始檔    Java 編譯器         Scala 原始檔




                 Java .class
                Bytecode 檔案       Scala 編譯器




                     Java
      執行                           JAR 檔
                Virtual Machine

32
Scala/Java 相互參照




33
Scala/Java 相互參照
 1.scalac -d classes/ iis/*.java iis/*.scala
 2.javac -cp 'classes/:/usr/share/scala/lib/*' -d
   classes/ iis/*.java




34
IDE Tools
 ? Scala IDE for Eclipse
     – http://www.scala-ide.org/
 ? IntelliJ IDEA
     – http://www.jetbrains.com/idea/




35
Command Line Tool
 ? SBT (Simple Build Tool)
     – http://code.google.com/p/simple-build-tool
     – 類似 Maven/Ant ,但和 XML 說再見
     – 可以使用 Maven Repository 裡的函式庫
     – 自動處理相依性和 Java/Scala 混合編譯的問題




36
Project Layout
            不在 Maven 裡的 JAR 檔




              Java 原始碼


               Scala 原始碼




               Unit Test

37
Maven Repository
 ? project/build/TestProject.scala




38
SBT Commands
 ?   reload
 ?   update
 ?   compile
 ?   run
 ?   console
 ?   test
 ?   exit

39
Agenda
 ?   Scala 是什麼?
 ?   為什麼使用 Scala ?
 ?   Java / Scala 混合專案流程與工具
 ?   Call Java from Scala
 ?   Call Scala from Java
 ?   Conclusion



40
Accessing Java Code Base
 ? Scala 可以直接使用絕大多數的 Java 程式
 ? 預設 Import
     – java.lang.*




41
Accessing Java Code Base




42
Java ? Scala Collection




43
Java ? Scala Collection




44
Implicit Conversions




45
Implicit Conversions




46
Implicit Conversion




47
剩下的一小部份



48
BeanProperty Annotation
 ? 自動產生 JavaBean 的 Getter / Setter
 ? scala.reflect package
     – @BeanProperty
       ? getXXXX()
       ? setXXXX()
     – @BooleanBeanProperty
       ? IsXXXX()
       ? setXXXX()



49
BeanProperty Annotation




50
Java Static Protected Member
 ? Scala 沒有 static 的概念
 ? 所有的函式/成員必定屬於某個特定物件
     – Singleton 物件
 ? 語意無法表達 protected?static 成員




51
Java Static Protected Member




52
Java Static Protected Member




53
Java Static Protected Member




54
Java Static Protected Member




55
Type Inference
 ? Scala 的 Type Inference 並不完美
     – 特別是在泛型和處理基本資料型態時
     – 可以使用 .asInstanceOf[T] 來強制轉型
 ? 例:
     – (1.5).asInstanceOf[java.lang.Double]
     – 1.asInstanceOf[java.lang.Integer]




56
Raw Types




57
Raw Types




58
Agenda
 ?   Scala 是什麼?
 ?   為什麼使用 Scala ?
 ?   Java / Scala 混合專案流程與工具
 ?   Call Java from Scala
 ?   Call Scala from Java
 ?   Conclusion



59
沒有用到 Scala 特異功能的都可以直接使用




60
Accessing Scala Code Base




61
Tools
 ? scalac -print
     – 將 Scala 的特殊語法轉成 Java 可表達的語法
     – 例如:將 Pattern Matching 轉成 if/else
 ? javap
     – 因為 Scala 編譯出的是標準的 JVM
       Bytecode ,可以使用此程式觀看 Scala 產出的
       .class 檔的結構



62
Singleton Object




63
Singleton Object




64
Singleton Object




65
Singleton Object




66
Tuple
 ? 總共有 N 個類別
     – scala.Tuple2[T1,?T2]
     – scala.Tuple3[T1,?T2,?T3]
     – ….
 ? 唯讀的 Immutable Object
 ? 可以直接在 Java 中使用
     – 基本資料型態以 java.lang.Object 做為 T



67
Tuple




68
Tuple




69
Tuple




70
High-Order Function
 ? 一樣有 N 個 Trait
     – scala.Function1[T1,?R]
     – scala.Function2[T1,?T2,?R]
     – ….
 ? 類別中的 apply(T1?v1,?T2?v2) 方法即為
   函式主體




71
High-Order Function
 ? 於 Java 中使用
     – scala.runtime.AbstractFunctionN
     – 覆寫 apply() 方法
     – 基本資料型態改用 Object 做型態參數




72
High-Order Function




73
High-Order Function




74
Operator Overloading
 ? Scala 中的 Method 可以用 Operator 當做
   名稱,以此達成 Operator Overloading
 ? Java / JVM 中的 Identifier 名稱規範
     – Scala 在編譯時期將 Operator 轉成符合 JVM
       規範的 Identifier
     – 使用 javap 可以看實際上該 Method 的名稱




75
Operator Overloading




76
Operator Overloading




77
Trait




78
Trait




79
Agenda
 ?   Scala 是什麼?
 ?   為什麼使用 Scala ?
 ?   Java / Scala 混合專案流程與工具
 ?   Call Java from Scala
 ?   Call Scala from Java
 ?   Conclusion



80
Conclusion
 ? Scala 可以幫助你更快地開發程式
 ? Scala 可以幾乎是無痛地整合至 Java 程式
 ? 特別適合用在以下兩種狀況
     – Unit Test
     – Prototyping




81
Thanks!
     Enjoy Programming!


82

More Related Content

What's hot (20)

Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
?
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
?
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Justin Lin
?
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
?
Scala
ScalaScala
Scala
deathxlent
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
Ecmascript
EcmascriptEcmascript
Ecmascript
jay li
?
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
Scala
ScalaScala
Scala
popeast
?
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
ted-xu
?
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
Justin Lin
?
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu
?
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
?
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
?
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Justin Lin
?
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
Ecmascript
EcmascriptEcmascript
Ecmascript
jay li
?
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
ted-xu
?
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
Justin Lin
?
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu
?
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?

Viewers also liked (6)

Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
Dave Orme
?
camel-scala.pdf
camel-scala.pdfcamel-scala.pdf
camel-scala.pdf
Hiroshi Ono
?
厂肠补濒补2.8への移行
厂肠补濒补2.8への移行厂肠补濒补2.8への移行
厂肠补濒补2.8への移行
guest5f4320
?
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
Derek Chen-Becker
?
Subversive talk - Eclipse Summit Europe 2008
Subversive talk - Eclipse Summit Europe 2008Subversive talk - Eclipse Summit Europe 2008
Subversive talk - Eclipse Summit Europe 2008
guestee71f
?
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
Stuart Roebuck
?
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
Dave Orme
?
厂肠补濒补2.8への移行
厂肠补濒补2.8への移行厂肠补濒补2.8への移行
厂肠补濒补2.8への移行
guest5f4320
?
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
Derek Chen-Becker
?
Subversive talk - Eclipse Summit Europe 2008
Subversive talk - Eclipse Summit Europe 2008Subversive talk - Eclipse Summit Europe 2008
Subversive talk - Eclipse Summit Europe 2008
guestee71f
?
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
Stuart Roebuck
?

Similar to 如何在 Java App 中導入 Scala (20)

Class loader
Class loaderClass loader
Class loader
Medivh2011
?
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Medivh2011
?
2. java introduction
2. java introduction2. java introduction
2. java introduction
netdbncku
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
闯补惫补类加载器
闯补惫补类加载器闯补惫补类加载器
闯补惫补类加载器
Fu Cheng
?
How to building WEKA model and automatic test by command line
How to building WEKA model and automatic test by command lineHow to building WEKA model and automatic test by command line
How to building WEKA model and automatic test by command line
Phate334
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
Joshua Tseng
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛
Wen-Tien Chang
?
Jasmine
JasmineJasmine
Jasmine
tb-vertical-guide
?
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
Dongxu Yao
?
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
Tankery Chen
?
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
mysqlops
?
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
xzdbd
?
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
?
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy
?
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
?
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
?
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Medivh2011
?
2. java introduction
2. java introduction2. java introduction
2. java introduction
netdbncku
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
闯补惫补类加载器
闯补惫补类加载器闯补惫补类加载器
闯补惫补类加载器
Fu Cheng
?
How to building WEKA model and automatic test by command line
How to building WEKA model and automatic test by command lineHow to building WEKA model and automatic test by command line
How to building WEKA model and automatic test by command line
Phate334
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
Joshua Tseng
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛
Wen-Tien Chang
?
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
Dongxu Yao
?
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
Tankery Chen
?
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
mysqlops
?
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
xzdbd
?
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
?
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy
?
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
?
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
?

如何在 Java App 中導入 Scala