Можно ли использовать поле из статического блока и назначить его полю класса? - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу нумеровать гонки в зависимости от их местоположения, и это должно быть сделано при создании машины в конструкторе.Вопрос в том, можно ли получить поле из статического блока и присвоить его значение полю класса транспортного средства?

public class Vehicle {

    static {
        Locale[] loc = {Locale.US, Locale.JAPAN, Locale.ITALIAN,};
        int[] beginNr = {100, 1000, 10000};
        int initNr = 200;
        Locale defLoc = Locale.getDefault();

        for (int i=0; i<loc.length; i++)
            if (defLoc.equals(loc[i])){
                initNr  = beginNr[i];
                break;
            }
    }

    private int width, height, lenght, weight;
    private Person owner;
    private VehicleStatus status;
    private static int count;
    private int currentNumber;


    public Vehicle(Person owner, int width, int height, int lenght, int weight) {
        this.width = width;
        this.height = height;
        this.lenght = lenght;
        this.weight = weight;
        this.owner = owner;
        status = STOPPED;
        currentNumber = ++count;
    }

Я хочу, чтобы значение поля initNr было присвоено полю currentNumber.

1 Ответ

0 голосов
/ 12 февраля 2019

Вопрос в том, можно ли получить поле из статического блока и присвоить его значение полю класса транспортного средства?

Нет, поскольку вы не объявляете поля в статическом инициализаторе: это локальные переменные .Доступ к ним возможен только внутри этого блока.

Если вы хотите поле, объявите его так:

static int initNr = 200;

static {
  // Stuff where you change the value of initNr.
}

Теперь вы можете ссылаться на initNr в остальной части класса.

...