Лучшие практики Guice и антишаблоны

Да. Существует.

++ оператор может или не может быть определен как функция. Для типов примитивов (интервал, дважды...) встроены операторы, таким образом, компилятор, вероятно, будет в состоянии оптимизировать Ваш код. Но в случае объекта, который определяет ++, вещи оператора отличаются.

оператор ++ (международная) функция должна создать копию. Это вызвано тем, что постфикс ++, как ожидают, возвратит различное значение, чем, что он содержит: это должно содержать свое значение во временной переменной, увеличить его значение и возвратить временный файл. В случае оператора ++ (), префикс ++, нет никакой потребности создать копию: объект может увеличить себя и затем просто возвратить себя.

Вот иллюстрация точки:

struct C
{
    C& operator++();      // prefix
    C  operator++(int);   // postfix

private:

    int i_;
};

C& C::operator++()
{
    ++i_;
    return *this;   // self, no copy created
}

C C::operator++(int ignored_dummy_value)
{
    C t(*this);
    ++(*this);
    return t;   // return a copy
}

Каждый раз, когда Вы называете оператор ++ (интервал), необходимо создать копию, и компилятор ничего не может делать с этим. Когда дали выбор, используйте оператор ++ (); этим путем Вы не сохраняете копию. Это могло бы быть значительно в случае многих инкрементов (большой цикл?) и/или большие объекты.

35
задан 3 revs, 2 users 80% 23 May 2017 в 12:08
поделиться

2 ответа

Некоторые из них есть на странице проекта Guice. Вот ссылка на первый , а остальные вы можете увидеть на боковой панели.

Тем не менее, я думаю, было бы здорово, если бы другие разместили и проголосовали здесь. Затем мы сможем написать лучшие из них для страниц Guice.

13
ответ дан 27 November 2019 в 07:20
поделиться

Я всегда считал, что внедрение конструктора в поля final - лучшая практика. Это сводит к минимуму изменчивое состояние и упрощает понимание класса, делая формальные зависимости класса явными.

public class MyClass {
    private final MyDependency dependency;

    @Inject
    public MyClass(MyDependency dependency) {
        this.dependency = dependency;
    }
}
31
ответ дан 27 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: