Является ли статический импорт хорошей практикой?

Я спрашивал себя во время кодирования на Java, хорошо ли делать import static com.example.method или лучше импортировать весь класс.

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

markspace 26.12.2020 01:10

Я ограничиваюсь импортом статики в перечисления (особенно когда они широко используются в классе) и методов, когда они используются функциональными параметрами (например, Class.staticComparator());

Duane 26.12.2020 01:15

Раньше я был большим поклонником статического импорта несколько лет назад, но теперь я запретил его везде, где только можно, даже для Assertions.* или Mockito.*. Причина этого в том, что не все имена подходят для статического импорта (например, of, forName, valueOf); импорт одного класса не вызывает (больших) (git) различий при добавлении/удалении многих статических импортов; статический импорт может конфликтовать и выглядеть неоднозначно (например, getInstance, valueOf). Имена с префиксом класса сохраняют контекст (например, сравните: SECOND - это значение перечисления из TimeUnit или оно приходит как константа откуда-то еще?)

terrorrussia-keeps-killing 26.12.2020 01:15

@fluffy Контекст имеет большое значение. Некоторые DSL, например, легко читаются при статическом импорте.

chrylis -cautiouslyoptimistic- 26.12.2020 01:19

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

terrorrussia-keeps-killing 26.12.2020 01:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
815
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Зависит от контекста, не существует явного правила для использования во всех случаях. Но наиболее распространенное использование — это когда вы делаете тест и вам нужно импортировать классы, такие как Assert.* или Mockito.*, чтобы много раз не повторять Assertion.assertEquals, хорошей идеей будет сделать что-то вроде этого:

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;

class ErrorsControllerImplTest {

    @Test
    void should_return_all_the_errors_types() {
        ErrorsController controller = new ErrorsControllerImpl();

        assertAll(
                () -> assertEquals(58, controller.getAllErrors().size()),
                () -> assertEquals("BadRequestStatus {code=4000509, message='Site must have a value'}",
                        controller.getAllErrors().get(0)));
    }
}

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

ну тут у тебя есть смысл. +1. Вот это действительно было бы полезно. Во всяком случае, я все еще ненавижу это, это дьявол.

aran 26.12.2020 02:53

Я согласен с вами, я не люблю его использовать. Единственное место, где я использую этот тип импорта, — это модульный тест, в остальных классах я предпочитаю понимать, что это за статический метод.

Andres Sacco 26.12.2020 03:05

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