2016-03-14 55 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中的局部变量没有被自动初始化。

相关问题