Java SE 提供了 **反射、枚舉和 Lambda 表達(dá)式** 這三種強(qiáng)大的特性,它們?cè)诓煌瑘?chǎng)景下發(fā)揮著重要作用:
1. 反射(Reflection)**
反射機(jī)制允許程序在運(yùn)行時(shí)動(dòng)態(tài)獲取類(lèi)的信息,并操作其屬性和方法。它是 Java 語(yǔ)言的元編程能力之一,常用于框架開(kāi)發(fā)(如 Spring)。
#### **反射的核心類(lèi)**
- `Class`:表示類(lèi)的運(yùn)行時(shí)信息。
- `Field`:表示類(lèi)的成員變量。
- `Method`:表示類(lèi)的方法。
- `Constructor`:表示類(lèi)的構(gòu)造方法。
獲取 Class 對(duì)象的三種方式**
```java
// 方式 1:使用 Class.forName()
Class<?> clazz1 = Class.forName("com.example.MyClass");
// 方式 2:使用 .class
Class<?> clazz2 = MyClass.class;
// 方式 3:使用 getClass()
MyClass obj = new MyClass();
Class<?> clazz3 = obj.getClass();
```
反射調(diào)用方法**
```java
Method method = clazz1.getDeclaredMethod("myMethod", String.class);
method.setAccessible(true); // 允許訪(fǎng)問(wèn)私有方法
method.invoke(obj, "參數(shù)值");
```
2. 枚舉(Enum)**
枚舉用于定義一組固定的常量,避免使用魔法值,提高代碼可讀性和安全性。
#### **枚舉的定義**
```java
public enum Status {
SUCCESS, FAILURE, PENDING;
}
```
枚舉的使用**
```java
Status status = Status.SUCCESS;
System.out.println(status.name()); // 輸出: SUCCESS
System.out.println(status.ordinal()); // 輸出: 0
```
枚舉的構(gòu)造方法**
```java
public enum OrderStatus {
NEW("新訂單"), SHIPPED("已發(fā)貨"), DELIVERED("已送達(dá)");
private final String description;
OrderStatus(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
```
3. Lambda 表達(dá)式**
Lambda 表達(dá)式是 Java 8 引入的特性,簡(jiǎn)化了匿名類(lèi)的寫(xiě)法,使代碼更加簡(jiǎn)潔。
#### **Lambda 表達(dá)式語(yǔ)法**
```java
// 傳統(tǒng)寫(xiě)法
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, Lambda!");
}
};
// Lambda 寫(xiě)法
Runnable r2 = () -> System.out.println("Hello, Lambda!");
```
#### **Lambda 與函數(shù)式接口**
```java
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}
// 使用 Lambda 實(shí)現(xiàn)接口
MathOperation addition = (a, b) -> a + b;
System.out.println(addition.operate(5, 3)); // 輸出: 8
```
| 特性 | 作用 | 適用場(chǎng)景 |
|------|------|---------|
| **反射** | 運(yùn)行時(shí)動(dòng)態(tài)操作類(lèi) | 框架開(kāi)發(fā)、動(dòng)態(tài)代理 |
| **枚舉** | 定義固定常量 | 狀態(tài)管理、配置項(xiàng) |
| **Lambda** | 簡(jiǎn)化匿名類(lèi) | 函數(shù)式編程、流處理 |