Есть ли какой-нибудь тег javadoc типа "необходимо избегать"? - PullRequest
1 голос
/ 05 июля 2019

Я пишу метод, который немного подавлен, и я хочу, чтобы мой пользователь предупредил его, чтобы он «лучше знал, что вы делаете», так же, как ведет себя @deprecated.Я могу написать это имя метода, но мне интересно, есть ли более элегантный способ сделать это.

открытый класс Divison {

public Divison() {
}

private int up;
private int down;


public int eval() {
    return ((int) up/down);
}

public void setVars(int up, int down) {
    this.up = up;
    if (up%down == 0) {
        this.down = down;
    } else {
        throw new ArithmeticException("the values must be divisible");
    } 
}

public void betterKnowWhatYouDoingSetVars(int up, int down) {
    this.up = up;
    this.down = down;
}

}

1 Ответ

1 голос
/ 05 июля 2019

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

Кстати, ваш пример реализации может войти в противоречивое состояние даже без метода betterKnowWhatYoureDoing..., и я даже не упоминаю многопоточность. Вы можете предотвратить это, просто сделав класс неизменным и выполнив эту проверку в конструкторе.

Я думаю, вы должны тщательно пересмотреть свой дизайн, прежде чем идти по этому маршруту.

Если вы должны предоставить такую ​​функциональность (я едва ли могу себе представить причину этого), по крайней мере, сделайте его закрытым для пакета (вместо public и , задокументированных как "опасные"). ).

Кроме того, те, кто действительно знает, что они делают, вероятно, никогда не будут вызывать этот метод в любом случае, так что это немного бессмысленно ...:)

...