2015-12-11 16 views
3

我無法理解爲什麼double xxyy在構造函數中被放入了final。爲什麼我不把它們放在double xxdouble yy。爲什麼 他們必須是final?我猜這個的全部目的是 創建一個immutable對象。構造函數java中的最後一個雙精度值

public class Point { 
private final double x, y; 
private double distance; 

public Point(final double xx, final double yy) { 
    this.x = xx; 
    this.y = yy; 
    this.distance = -1; 
} 

} 
+4

這些參數沒有* need *是最終的。 –

+1

它們對Point是不可變的也沒有任何影響。 – Stultuske

+0

上面兩個方法總結了答案,但可能在代碼中降低了你可能想要將這些傳遞給線程運行方法?然後他們將是最終的。沒有實際意義。 –

回答

11

這些參數沒有必要是最終的。

有兩個原因使參數決賽:

  1. 要利用它們在該函數聲明的內部類;
  2. 防止他們的值被意外更改。

顯然(1)不適用。

(2)不是必須的,因爲它是如此簡單的代碼,並且您可以看到它不會更改參數。

有一個思想流派,它說所有的參數和局部變量都應該被聲明爲最終的,因爲它使得更容易推理代碼,就像使用不可變類型更容易推理使用它們的代碼。

還有一種思想流派說,到處添加final只是不必要的噪音,而且,如果您正在編寫的方法無法判斷值是否在變化,那麼您的方法太長。

重要的是,使參數和局部變量最終歸結爲個人/團隊偏好。

0

聲明x和y變量作爲最終解決目的(即,該值不能稍後改變)。將構造函數的參數聲明爲final是沒有意義的。