引言
Scala 是一种结合了面向对象和函数式编程的现代编程语言,广泛应用于大数据处理框架如 Apache Spark 和 Apache Flink。对于熟悉 Java 的开发者来说,Scala 的学习曲线相对平缓。本文将通过类比 Java 中的概念,帮助 Java 开发者快速上手 Scala。
1. 基本语法
1.1. 数据类型
以下是 Scala 和 Java 数据类型的汇总表格:
| Scala 数据类型 | Java 数据类型 | 说明 |
|---|---|---|
Int |
int |
32 位整数 |
Long |
long |
64 位整数 |
Double |
double |
64 位浮点数 |
Float |
float |
32 位浮点数 |
Char |
char |
单个字符 |
Byte |
byte |
8 位整数 |
Short |
short |
16 位整数 |
Boolean |
boolean |
布尔值 |
String |
String |
字符串类型,Scala 的 String 是不可变的,与 Java 的 String 类似。 |
List[T] |
List<T> |
不可变的列表 |
ArrayList[T] |
ArrayList<T> |
可变的列表 |
Set[T] |
Set<T> |
不可变的集合 |
HashSet[T] |
HashSet<T> |
可变的集合 |
Map[K, V] |
Map<K, V> |
不可变的映射 |
HashMap[K, V] |
HashMap<K, V> |
可变的映射 |
Option[T] |
Optional<T> |
表示可能存在或不存在的值,Scala 的 Option 更加简洁和易用。 |
(T1, T2) |
Pair<T1, T2> (自定义类) |
元组,Scala 支持多达 22 个元素的元组。 |
trait |
interface |
特质可以包含方法的实现,而接口只能包含方法的声明。 |
case class |
POJO |
case class 自动生成 equals、hashCode 和 toString 方法。 |
Any |
Object |
所有类型的超类,Scala 中的所有类型都继承自 Any。 |
AnyVal |
primitive types |
所有值类型的超类,Scala 中的基本数据类型都继承自 AnyVal。 |
AnyRef |
Object |
所有引用类型的超类,Scala 中的引用类型都继承自 AnyRef。 |
这个表格总结了 Scala 和 Java 中的基本数据类型及其对应关系。
1.2 变量
在 Java 中,我们使用 int, String 等类型来声明变量。在 Scala 中,变量的声明也很简单,但使用 val 和 var 来区分不可变和可变变量。
-
不可变变量(类似于 Java 中的
final):// Java final int x = 10; final String name = "Alice";// Scala val x: Int = 10 // 不可变变量 val name: String = "Alice" // 不可变变量 -
可变变量:
// Java int y = 20; String mutableName = "Bob";// Scala var y: Int = 20 // 可变变量 var mutableName: String = "Bob" // 可变变量
1.3 控制结构
Scala 的控制结构与 Java 类似,但语法更简洁。例如,if 语句和 for 循环。
-
if 语句:
// Java if (x > 0) { System.out.println("Positive"); } else { System.out.println("Non-positive"); }// Scala if (x > 0) println("Positive") else println("Non-positive") -
for 循环:
// Java for (int i = 0; i < 5; i++) { System.out.println(i); }// Scala for (i <- 0 until 5) println(i)
1.4 函数定义
Scala 中的函数定义与 Java 方法类似,但更为简洁。Scala 支持高阶函数和匿名函数。
-
函数定义:
// Java public int add(int a, int b) { return a + b; }// Scala def add(a: Int, b: Int): Int = a + b -
匿名函数:
// Java Function<Integer, Integer> square = x -> x * x;// Scala val square: Int => Int = x => x * x
1.5 类和对象
Scala 的类定义与 Java 类似,但构造函数的定义更为简洁。
-
类定义:
// Java public class Person { private String name; public Person(String name) { this.name = name; } }// Scala class Person(val name: String) // 主构造函数 -
伴生对象(类似于 Java 的静态方法):