2016-03-14 87 views
1

我有一個在構造函數中初始化List的問題。Java。在構造函數中初始化列表

我想分配參數給變量「tr」和tr.getVertices()是一個List。

SimpleTriangle tr = new SimpleTriangle(tr.getVertices(), tr.getColour(), tr.getThickness(), ShapeType.TRIANGLE); 
trList.add(tr); 

它higlights tr.getVertices(),並說 「變量TR可能不會被初始化」

凡SimpleTriangle是一個子類。

public SimpleTriangle(List<Point> vertices, Color colour, int thickness, ShapeType shapeType) { 
super(vertices, colour, thickness, shapeType); } 

和父類有方法

public List<Point> getVertices() { 
    return vertices; 
} 

回答

5

您試圖調用一個變量的方法你還沒有初始化:

//    v--this variable  v--is not yet initialized here 
SimpleTriangle tr = new SimpleTriangle(tr.getVertices(), tr.getColour(), tr.getThickness(), ShapeType.TRIANGLE); 

您正在嘗試初始化它自己的頂點,這沒有任何意義上的SimpleTriangle。您必須將的一些List傳遞給構造函數。構造函數的所有其他參數也是如此。

3

的錯誤是正確的,你不能用一個變量已經初始化之前。

您需要提供真實的價值,而不是僅在將來纔有意義的價值。

注意:Ruby確實允許您按照您的建議進行操作,並且可以將其視爲語言設計中的錯誤。

+1

加一個節省我的時間。我不會學習Ruby。 –

+1

@PaulBoddington我最喜愛的計算機講話的所有時間https://www.destroyallsoftware.com/talks/wat提到它。 –

0

tr是一個你想要實例化的局部變量。在使用它的方法之前,你需要實例化一個對象。它就像你要求null來完成一個過程。事實上,你甚至不能把它叫做null,因爲java中的局部變量沒有被自動初始化。

相關問題