2011-12-12 101 views
1

我明白這個答案可能是「一致的」,但我想知道是否有添加適用於字段/方法的字段或方法的註釋的優點。例如,是否有任何好處:我應該在哪裏放置字段/方法註釋?

@XmlElement 
private String str; 

public String getString() { 
    return str; 
} 

過來:

private String str; 

@XmlElement 
public String getString() { 
    return str; 
} 

感謝。

+0

這取決於你的庫支持。如果你可以做任何一件事,它通常會在文檔中提出什麼建議? –

回答

3

它取決於在編組或解組操作期間您想要執行的get/set方法中是否存在邏輯。

實施例#1 - JPA實體

一些JPA實現在代碼使用字節碼操作,以「編織」的吸氣劑來進行遲緩裝載。如果您將這種類型的模型映射到XML,那麼您將需要註釋getter以確保調用get方法的邏輯。

例2 - 不匹配的get/set方法

在用戶下面的答案有不符合規定的豆訪問方法。對於那個用例,我建議使用字段訪問。

示例#3 - 只讀屬性

如果你的對象模型具有一個getter,但沒有setter屬性,然後現場訪問是有益的。

更多信息

+0

感謝這個答案,它肯定突出了我甚至沒有考慮過的一些觀點。 – DaveRlz

0

這取決於你在做什麼。例如:您的xml序列化器/轉換器使用getter或直接讀取字段?

  1. 如果它使用getter,請標記getter,因爲您可以使用任何後退邏輯來獲取getter,而不僅僅是後場。
  2. 如果它直接讀取該字段,請標記該字段,因爲get對該功能無用。吸氣劑可能在未來發生變化,但該領域不會也不能改變。
0

在第一種情況下,對標註元素的訪問將使用反射來執行,因爲該字段是私人的。這可能會導致性能下降(要在真實案例中檢查)。

在第二種情況下,將使用getter/setter執行訪問。

在Hibernate中,例如,註釋的私人屬性可以創建只讀真正屬性:

@Id 
private int id; 

// No setter so it cannot be changed without reflexion 
public int getId() { 
    return id; 
} 

。另一方面,詮釋着存取會給你機會做不僅僅是設置更多/獲取屬性。

+1

註解吸氣劑/注射器時仍可能使用反射。 –

0

好處依賴於註釋代表什麼。

  1. 許多框架允許字段/方法註釋相互補充,如Spring框架中的setter注入。有場註釋可以讓你決定是否應該出席二傳手。

  2. 其他註釋處理器可能根據註釋的方法或字段是否觸發不同的行爲。例如,可以將安全註釋放在對該方法的方法控制授權上,而字段註釋可以控制對引用該變量的所有例程的授權。

但一般在我看來,選擇最有可能是偏好,或風格的,如果你想。

相關問題