Являются ли значения перечисления общими для всех экземпляров класса?

Итак, скажем, у меня есть следующее объявление enum:

public class WatchService implements Runnable
{
    private State state;

    private enum State
    {
        FINDING_MANIFEST, FINDING_FILES, SENDING_FILES, WAITING_TO_FINISH
    };
    // other stuff
}

Теперь предположим, что у меня есть следующий абстрактный класс:

public abstract class MyOtherAbstractClass extends MyAbstractClass
{
    // other stuff
    private WatchService watchService;
    // other stuff
}

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

public class MyClass extends MyOtherAbstractClass
{
    // other stuff
}

Если у меня есть несколько экземпляров MyClass, будут ли они все использовать текущее значение State? Например, если один экземпляр объявляет state = State.FINDING_MANIFEST;, будут ли все экземпляры иметь текущее состояние FINDING_MANIFEST?

Я надеюсь в этом есть смысл..


person mre    schedule 17.03.2011    source источник


Ответы (3)


Если "состояние" статично, то да. В противном случае нет.

Изменить на:

private static State state;

Это делает state общим для всех экземпляров вашего класса.

person Erik    schedule 17.03.2011
comment
@DLK - Почему переменная, содержащая перечисление, по умолчанию является статической? Это то же самое, что и любая другая переменная. - person Brian Roach; 17.03.2011
comment
Должно быть, я неправильно реализовал это в первый раз, так как я столкнулся с этим в какой-то момент после это. Я, вероятно, сделал что-то странное, но я хотел попросить вас, ребята, дать дополнительные разъяснения. - person mre; 17.03.2011
comment
@DLK: я думаю, вы путаете этот экземпляр. Экземпляры перечисления (которые являются константами, такими как SENDING_FILES) являются общими (поскольку они существуют только один раз), но не переменные, которые содержат эти экземпляры. - person f1sh; 17.03.2011

state — это переменная экземпляра. Каждый экземпляр объекта имеет свой собственный.

Если вы определили его как

private static State state;

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

person Brian Roach    schedule 17.03.2011

Если я правильно понимаю вопрос, это не относится к перечислениям. Представьте ту же ситуацию с использованием private String state = "FINDING_MANIFEST";. Если state не равно static, он не будет использоваться совместно экземплярами.

person f1sh    schedule 17.03.2011