В примере фрагмента определялся статический интерфейс для того, чтобы уведомлять активность о нажатиях:
static interface WorkoutListListener {
void itemClicked(long id);
};
Почему интерфейс статический? К примеру, если переменная статическая — она используется в единственном экземпляре для всех экземпляров класса, но что делают статические интерфейсы?
Ответ
Согласно JLS 8.5.1. Static Member Type Declarations:
A member interface is implicitly static (§9.1.1). It is permitted for
the declaration of a member interface to redundantly specify the
static modifier.
Интерфейс - член класса, неявно является статическим. При объявлении
интерфейса - члена класса допускается избыточное указание модификатора
static
Конструкции
public class SomeClass {
abstract static interface Interface {
public abstract void foo();
}
}
и
public class SomeClass {
interface Interface {
void foo();
}
}
эквивалентны, т.к. интерфейс всегда abstract, вложенный интерфейс всегда static, а методы интерфейса всегда public. До java 8 методы интерфейса всегда были abstract, в восьмой версии метод интерфеса может быть static или default, в отсутствие этих модификаторов abstract подразумевается. Явное указание модификаторов допустимо, но не приветствуется с точки зрения стиля.
Поля в интерфейсе всегда public, static и final, избыточное указание этих модификаторов так же допустимо.
Комментариев нет:
Отправить комментарий