0

(Нет) свойств в Java?

16

Я долгое время игнорировал Java и только недавно начал с ней работать, и мой первый опыт вызвал небольшой шок: в Java нет свойств в стиле C#!

Ладно, с этим можно смириться. Тем не менее, я клянусь, что видел код с геттерами и сеттерами для свойств в одном из проектов, но не могу вспомнить, где именно это было. Как это достигалось? Существует ли какое-то расширение языка для этого? Это связано с NetBeans или чем-то подобным?

5 ответ(ов)

0

Java Property Support действительно была предложена для Java 7, однако не была включена в язык. Это предложение касалось улучшения работы с настройками и свойствами в Java, что могло бы упростить работу разработчиков с конфигурацией приложений.

Несмотря на то, что эта особенность не попала в окончательную версию Java 7, информация о ней все еще доступна. Вы можете ознакомиться с дополнительными ссылками и информацией по этому вопросу на сайте, который вы упомянули: Pure Danger Java 7.

Если у вас есть дополнительные вопросы по этому поводу или интересуют другие аспекты работы с свойствами в Java, пожалуйста, не стесняйтесь задавать их!

0

Согласно биновской конвенции, код обычно пишется следующим образом:

private int foo;
public int getFoo() {
    return foo;
}
public void setFoo(int newFoo) {
    foo = newFoo;
}

В некоторых других языках, работающих на JVM, таких как Groovy, доступна возможность использования переопределяемых свойств, аналогично C#. Например, вы можете написать так:

int foo

Такое свойство можно просто использовать через .foo, и при этом используются реализации по умолчанию для getFoo и setFoo, которые можно переопределить при необходимости.

0

В приведенном вами коде на Java используется библиотека Project Lombok для автоматического создания методов доступа (геттеров и сеттеров) к полям класса Animal. Аннотации @Getter и @Setter сокращают объем кода, устраняя необходимость в ручном написании этих методов.

Вот краткое объяснение кода:

public class Animal {

    @Getter @Setter private String name;     // Имя животного
    @Getter @Setter private String gender;   // Пол животного
    @Getter @Setter private String species;  // Вид животного
}

Эти аннотации работают аналогично свойствам в C#, предоставляя доступ к полям name, gender и species без необходимости явно объявлять методы. Это упрощает код и делает его более читаемым. Если вам нужно больше информации о Project Lombok, рекомендую ознакомиться с их документацией.

0

Вам не обязательно использовать префиксы "get" и "set", чтобы это выглядело больше похоже на свойства. Вы можете сделать это следующим образом:

public class Person {
    private String firstName = "";
    private Integer age = 0;

    public String firstName() { return firstName; } // геттер
    public void firstName(String val) { firstName = val; } // сеттер

    public Integer age() { return age; } // геттер
    public void age(Integer val) { age = val; } // сеттер

    public static void main(String[] args) {
        Person p = new Person();

        // установка значений
        p.firstName("Лемуэль");
        p.age(40);

        // получение значений
        System.out.println(String.format("Я %s, мне %d лет",
            p.firstName(),
            p.age()));
    }
}

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

0

Большинство IDE для Java, таких как Eclipse, позволяют автоматически генерировать код геттеров и сеттеров по вашему запросу. Существуют разные соглашения по их написанию, и в Eclipse вы можете выбрать ту конвенцию, которая вам нравится, а также задать свои собственные правила.

Кроме того, Eclipse предлагает автоматизированное рефакторирование, которое позволяет вам обернуть поле в геттер и сеттер, и автоматически изменит весь код, который обращается к этому полю напрямую, чтобы использовать геттер и/или сеттер.

Однако стоит помнить, что Eclipse может изменять только тот код, о котором она осведомлена — любые внешние зависимости могут быть нарушены в результате такого рефакторинга.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь