何時使用 Setter 方法或建構子在 Java 中設定變數的值
一、簡介
開發人員遇到的選擇之一是是否應使用 setter 方法或建構函數來設定變數的值。這兩種技術都有其優點,但是它們在不同的情況下實施。
在本教程中,我們將討論何時使用 setter 方法或建構子來設定 Java 中變數的值。
2. 使用Setter方法
Setter 方法是我們可以用來設定 Java 類別中實例變數值的函數。此外,它們還提供了一種靈活的方法來修改物件初始化後的狀態。使用 setter 方法設定的實例變數不能宣告為 Final,因為這些值可以在物件初始化後變更。
讓我們考慮一個 Web 應用程式中 User 類別的真實範例:
public class User {
private String username;
private String password;
public void setUsername(String username) {
// Validate username format
if (username.matches("[a-zA-Z0-9_]+")) {
this.username = username;
} else {
throw new IllegalArgumentException("Invalid username format");
}
}
// Other methods...
}
在此範例中, User
類別封裝了 Web 應用程式的使用者資料。 setUsername()
和setPassword()
setter 方法分別允許設定username
和password
。這些方法還執行驗證,以確保使用者名稱遵循特定格式並且密碼符合特定強度標準。
讓我們測試 setter 方法並設定User
物件的username
:
@Test
void givenNewUser_whenSettingUsername_thenUsernameIsSet() {
User user = new User();
user.setUsername("john_doe");
assertEquals("john_doe", user.getUsername());
}
在這裡,我們使用預設建構函數User()
建立一個新的User
對象,然後呼叫使用者對像上的setUsername()
方法將username
設定為「 john_doe
」。最後,我們使用斷言來驗證username
是否設定正確。
3. 使用建構函數
建構函式是允許我們初始化物件的特殊方法。它們在創建類別的物件時被呼叫。建構函數也可以用來設定實例變數的初始值。建構函數的一個顯著特徵是它們允許初始化最終實例變量,確保這些值在物件的整個生命週期中保持不變。
讓我們考慮一個代表電子商務系統中產品的Product
類別的真實範例:
public class Product {
private String name;
private double price;
private String category;
public Product(String name, double price, String category) {
this.name = name;
this.price = price;
this.category = category;
}
// Other methods...
}
在此範例中, Product
類別表示可在電子商務系統中銷售的產品。建構子Product(String name, double price, String category)
初始化產品的name
、 price
和category
。透過使用建構函數,我們確保在建立物件時設定有關產品的基本信息,例如name
、 price
和category
。
若要使用建構函式建立具有特定詳細資訊的Product
物件:
@Test
void givenProductDetails_whenCreatingProductWithConstructor_thenProductHasCorrectAttributes() {
Product product = new Product("Smartphone", 599.99, "Electronics");
assertEquals("Smartphone", product.getName());
assertEquals(599.99, product.getPrice(), 0.001);
assertEquals("Electronics", product.getCategory());
}
在這裡,我們使用建構子Product(String name, double price, String category)
來建立一個新的Product
對象,並在物件建立過程中直接將產品的name
、 price
和category
作為參數傳遞。
4. 在 Setter 和建構函數之間進行選擇
在選擇 setter 方法和建構函式時,請考慮以下準則:
使用 Setter 方法 | 使用建構函數 |
---|---|
當變數的值可能隨時間變化時 | 初始化不可變屬性時 |
在設定值之前需要驗證或附加邏輯時 | 確保在物件建立時設定某些值時 |
物件初始化後設定值時 | 當變數的值在初始化後不應更改時 |
5. 結論
總之,setter 方法和建構子都是 Java 中設定變數值的重要工具。透過了解本文中介紹的差異和指南,開發人員可以就何時有效使用 setter 方法或建構函數做出明智的決定。
與往常一樣,隨附的源代碼可以在 GitHub 上找到。