Вложенное определение переименования Java - объявляет ли он как статичное значение?
У меня есть интерфейс - здесь в качестве примера есть красиво надуманная версия:
public interface Particle {
enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
Есть ли какая-либо разница в том, как будут выполняться реализации этого, если я определил Charge
enum как статический - т.е. имеет ли это эффект:
public interface Particle {
static enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
Ответы
Ответ 1
Нет, это не имеет значения. Однако причина не в том, что это декларация участника внутри интерфейса, как говорит Джон. Настоящая причина в соответствии с спецификацией языка (8.9), которая
Вложенные типы перечислений неявно статичный. Допустимо явно объявить вложенный тип перечисления быть статичным.
В следующем примере статичность не имеет никакого значения (даже если у нас нет интерфейса):
public class A {
enum E {A,B};
}
public class A {
static enum E {A,B};
}
Другой пример с вложенным частным перечислением (неявно открытым).
public class A {
private static enum E {A,B}
}
Ответ 2
Нет, это не имеет значения. Из спецификация языка, раздел 9.5:
Интерфейсы могут содержать тип члена декларации (§8.5). Тип члена объявление в интерфейсе неявно static
и public
.