как обновить конструкторы Java, равно, хэш и т. д.в затмении? - PullRequest
14 голосов
/ 01 октября 2011

Я хотел бы знать, знает ли кто-нибудь о хорошем способе обновления, конструкторах, уравнениях, хешах, строках и т. Д., Сгенерированных Eclipse в Java.Много времени, после того как я использую автоматически сгенерированные заглушки кода, я добавляю переменную-член в класс, а затем мне нужно удалить автоматически сгенерированный код, и сделать это снова и снова.Есть ли способ заставить затмение добавить новую переменную в автоматически сгенерированные заглушки кода?

edit: ок, удаление не является обязательным, однако мне все еще нужно идти и генерировать каждую из них, я 'ищу автоматическое решение.

Ответы [ 3 ]

6 голосов
/ 05 октября 2011

Это не совсем решение вашего вопроса, но я больше не использую автоматически сгенерированные методы Eclipse, я использую Apache commons lang EqualsBuilder и HashCodeBuilder

Так, например, вы можете сделать:

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

public class EqualsTest {
    private String foo;
    private int bar;

    // getters and setters

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj);
    }
}

Использует отражение и не нуждается в изменении при добавлении поля. Однако есть и другие варианты, в которых вы можете указать поля для использования, а также, если вы хотите учесть hashCode суперкласса.

РЕДАКТИРОВАТЬ: Как было указано, аспект отражения может иметь некоторые потери производительности. Лично я не использую отражения HashCodeBuilder или EqualsBuilder в производственном коде, я использую toHashCode (как показано ниже). Однако я использую ReflectionToStringBuilder для регистрации и тому подобное.

Вот пример, в котором не используется отражение, но требуется добавить еще одну строку при добавлении поля:

public int hashCode() {
  // you pick a hard-coded, randomly chosen, non-zero, odd number
  // ideally different for each class
  return new HashCodeBuilder(17, 37).
    append(foo).
    append(bar).
    toHashCode();
}

Подробнее о hashCodeBuilder см. apache commons equals / hashcode builder

4 голосов
/ 05 октября 2011

Взгляните на www.projectlombok.org как альтернативу написанию этих методов самостоятельно.В частности, аннотация @Data, кажется, соответствует вашим потребностям, см. http://www.projectlombok.org/features/Data.html.

2 голосов
/ 01 октября 2011

Iv'e создал собственный проект с одним полем и попросил eclipse сгенерировать все базовые методы. После этого я добавил новое поле, попросил его снова сгенерировать эти методы (source -> generate ...), мне предложили заменить старые, я нажал «да» и отобразились обновленные методы.

Надеюсь, это помогло

...