2016-03-14 3 views
1

У меня возникла проблема инициализации List in constructor.Java. Инициализация списка в конструкторе

Я пытаюсь назначить параметры переменной «tr», а tr.getVertices() - это List.

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

Это Higlights tr.getVertices() и говорит: "Variable тр не может инициализирован"

Где 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 из Point s конструктору. То же самое верно для всех других параметров конструктора.

3

Ошибка является правильным, вы не можете использовать переменную, прежде чем он был инициализирован.

Вам необходимо предоставить ему реальные ценности, а не те, которые будут иметь смысл только в будущем.

Примечание: Ruby позволяет делать то, что вы предлагаете, и может считаться ошибкой в ​​оформлении языка.

+1

Плюс один для экономии времени. Я не узнаю Руби. –

+1

@PaulBoddington мой любимый компьютерный разговор о всех вретах https://www.destroyallsoftware.com/talks/wat упоминает об этом. –

0

tr - локальная переменная, которую вы хотите создать. Перед использованием его методов необходимо создать экземпляр объекта. Это похоже на то, что вы запрашиваете null, чтобы выполнить процесс. И на самом деле вы даже не можете назвать его нулевым, поскольку локальные переменные в java не инициализируются автоматически.

Смежные вопросы