Статические поля и методы в record в Java
Компоненты заголовка принадлежат каждому экземпляру.
Статические поля и методы общие для типа:
их объявляют с static в теле record и
вызывают через имя типа, без new:
record Post(String title, int views) {
static int maxViews = 1000;
static boolean withinLimit(int views) {
return views <= maxViews;
}
}
Вызовем статический метод записи и прочитаем поле maxViews:
System.out.println(Post.withinLimit(120));
System.out.println(Post.maxViews);
Статическое поле не попадает в equals,
hashCode и toString record -
там только компоненты. Так хранят счётчики,
константы и фабричные методы:
Post post = Post.draft("Notes");
System.out.println(post.views());
Статический метод может создавать экземпляр и обращаться к компонентам только у уже существующего объекта, переданного параметром:
Post post = new Post("News", 12);
System.out.println(Post.format(post));
Сделайте record Employee с компонентами
name и dept.
Добавьте статическое поле defaultDept
со значением "General" и выведите его
через Employee.defaultDept.
Сделайте record Employee с компонентами
name и id.
Добавьте статический метод guest(),
возвращающий new Employee("Guest", 0).
Выведите имя созданного сотрудника.