2014-10-24 2 views
0

Для простоты я опишу базовый пример.Установка значения константы в Java после объявления

Если я использую запись (STRUCT) в моей Java программы, как так:

public class Store{ 
    class Product{ 
    final int item1; 
    final int item2; 
    final int item3; 
    } 

и создать конструктор для моего класса, который будет принимать значения для представления значения каждого элемента:

public Store(int[] elements) { 

    Product x = new Product(); 
    x.item1 = elements[0]; 
    x.item2 = elements[1]; 
    x.item3 = elements[2]; 
    } 
} 

компилятор дает мне две ошибки:

«заготовка последнее поле item1 не может быть инициализирован

«Конечное поле не может быть назначено»

Я понимаю, что мы не можем повторно назначать значения константам, но есть ли способ присвоить значения неинициализированным константам?

+1

'final' переменная не может быть изменена. он должен быть инициализирован во время объявления. – Rustam

+0

Вы можете инициализировать свой финал в своем классе. Это то, что вы должны делать. Поэтому создайте конструктор, который сделает это. –

+1

'Продукт x = новый продукт,' это утверждение правильно? – Rustam

ответ

2

Единственный способ присвоить такие значения в конструкторе, так что вам нужно будет добавить конструктор вашей структуры класса:

class Product{ 

    Product(double item1, double item2, double item3) { 
     this.item1 = item1; 
     this.item2 = item2; 
     this.item3 = item3; 
    } 


    final double item1; 
    final double item2; 
    final double item3; 
} 

, а затем использовать его в остальной части кода:

public Store(int[] elements) { 

    Product x = new Product(elements[0], elements[1], elements[2]); 

} 
+0

В строке 2 можно сказать: 'Продукт (конечный двойной элемент1, окончательный двойной элемент2, последний двойной элемент3) {....}' – jean

+2

Вы имеете в виду параметры конструктора? да, вы можете, это не нужно, но это не больно. – morgano

+1

@jean Это разрешено, но в этом случае это не имеет значения. Ваш выбор, действительно. – Pokechu22

1

вы можете сделать так:

class Store { 
    public Store(int[] element) { 
     Product p = new Product(element[0], element[1], element[2]); 
    } 

    class Product { 
     final int item1; 
     final int item2; 
     final int item3; 

     public Product(int item1, int item2, int item3) { 
      this.item1 = item1; 
      this.item2 = item2; 
      this.item3 = item3; 
     } 
    } 
}