В java есть что-то похожее на свойства C#?

Свойства C# (я имею в виду методы get и set) - очень полезная функция. есть ли в java что-то похожее на свойства C#. Я имею в виду, как мы можем реализовать что-то вроде следующего кода C# в Java:

public string Name
{
    get
    {
        return name;
    }

    set
    {
        name = value;
    }
}

заранее спасибо

5 ответов

Решение

Нет, Java не имеет эквивалентности. Он имеет только методы доступа и мутатора, причудливые имена для методов получения и установки. Например:

public class User {
    private String name;

    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}

Вы можете взглянуть на Project Lombok, так как он пытается облегчить написание Java-кода. Это позволяет вам использовать аннотации @Getter и @Setter, которые будут обеспечивать методы getBlah() и setBlah():

public class GetterSetterExample {
  @Getter @Setter private int age = 10;
}

Или вы можете просто использовать @Data, и он автоматически реализует ваши методы hashCode(), equals(), toString() и getter вместе с установщиками в не конечных полях:

@Data public class DataExample {
  private String name;
}

Проблемы, с которыми я столкнулся в проекте, однако, заключаются в том, что все это немного вуду, что может сбивать с толку, и что вам нужно установить плагин eclipse (или что-то еще), чтобы заставить работать автокомпиляцию.

Свойства не только удобны с точки зрения написания getters а также setters инкапсулированные в единицу, но они также обеспечивают хороший синтаксис в точке вызова.

Window.Title =  "New"; //which looks natural

в то время как с getters а также setters это обычно

Window.setTitle("New");

Было предложено добавить C#-подобную поддержку свойств (и событий) в Java, но, похоже, это отклонено для следующей версии Java (Java 7).

Увидеть:

Вы можете просто объявить приватную переменную и написать методы вручную. Однако, если вы используете Eclipse, вы можете нажать на переменную, выбрать "Source" и "Generate getter and setters". Это примерно так же удобно, как свойства C#.

Другие вопросы по тегам