簡體   English   中英

在大多數情況下,我們是否應該定義吸氣塞子?

[英]Should we define getters setters in most of the cases?

如果我不需要進行任何檢查(在getter期間)或更新其他東西(在setter期間),那么擁有一個簡單的public成員變量就足夠了嗎?

在處理引用時,應盡可能避免使用setter,甚至getter。 除非出於某些特定原因無法做到,否則始終應首選不變性。 在Java中,即使我在那里不進行任何檢查,我個人更喜歡使用吸氣劑,它只是提供了更多控制權。

如果您不需要檢查或更新該值,請將其設為私有,並且不提供任何其他訪問權限。

我的個人理念是僅在需要訪問功能時才公開它們,然后不一定提供設置和配對。

當您需要對輸入值進行安全檢查或在什么條件下讀取變量時,getter和setter方法非常有用。

當您有一個帶有許多基元的簡單對象而只需要一個地方將它們捆綁在一起時,它們就很糟糕。 在那種情況下,我希望有公眾成員。

請注意,在scala中不存在此問題,因為scala為您自動生成getter和setter方法:

class Person(var name: String)

val p = new Person("Jonh")
p.name = "James"
println(p.name)             // James

然后,如果需要,您將覆蓋默認的默認訪問器和更改器:

class Person(private var _name: String) {
  def name = _name
  def name_=(aName: String) { _name = aName }
}

仍然有效:

val p2 = new Person2("Jonh")
p.name = "James"
println(p.name)             // James

該答案對其他語言(C#,Python等)中類似(但不等效)的概念進行了解釋,您可以在其中擁有property :一對方法(getter和/或setter)。

正如Elliott指出的那樣,當您的班級具有不變性時,設置員就沒有意義了。 即使在Java之類的語言中,您也可以編寫一個getter方法,但是我可以說您通常可以避免使用final public屬性,因為您可以通過構造函數來更改它們的值,盡管我不會確切地稱它為“ Java方式”(大聲笑) ):

class Person {
  public final int age;

  public Person(int theage) {
    // Let's transforme age here
    // Imagine this could would go in the getter
    age = theage * 2;
  }
}

如果您正在做簡單的事情,那么公開是最實用的。

正如詹姆森所提到的,有時您只需要getter或setter(String.getCharAt()等)。

如果您正在做一個大型項目,則至少應進行安全檢查(再次是詹姆森)。 同樣,它使您在正確的地方使用它們看起來很聰明,但這實際上取決於您的工作,也許共享一段代碼?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM