Что такое хороший вариант использования для статического импорта методов?

127
задан Miserable Variable 29 May 2013 в 19:26
поделиться

9 ответов

Это от руководства Sun, когда они выпустили функцию (выделение в оригинале):

Поэтому, когда необходимо использовать статический импорт? Очень экономно! Только использование это, когда Вы иначе испытали бы желание объявить локальные копии констант или злоупотребить наследованием (Постоянный Интерфейсный Антишаблон).... При злоупотреблении статической функции импорта она может сделать программу нечитабельной и неудобной в сопровождении, загрязнив ее пространство имен всеми статическими участниками, которых Вы импортируете. Читатели Вашего кода (включая Вас, спустя несколько месяцев после записи этого) не будут знать, которые классифицируют статического участника, прибывает из. Импорт всех статических участников от класса может быть особенно вреден для удобочитаемости; если Вы нуждаетесь только в одном или двух участниках, импортируете их индивидуально.

( https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html )

существует две первых части, хотят вызвать конкретно:

  • Использование статический импорт только [1 115], когда Вы испытали желание "злоупотребить наследованием". В этом случае Вы испытали бы желание иметь BusinessObject extend some.package.DA? Если так, статический импорт может быть более чистым способом обработать это. Если Вы никогда не мечтали бы о расширении some.package.DA, то это - вероятно, плохое использование статического импорта. Не используйте его только для сохранения нескольких символов при вводе.
  • участники человека Импорта. Говорят import static some.package.DA.save вместо DA.*. Это сделает намного легче найти, куда этот импортированный метод прибывает из.

Лично, я использовал эту функцию языка очень редко, и почти всегда только с константами или перечислениями, никогда с методами. Компромисс, для меня, почти никогда не стоит того.

140
ответ дан 24 November 2019 в 00:45
поделиться

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

-5
ответ дан 24 November 2019 в 00:45
поделиться

Необходимо использовать их когда:

  • Вы хотите использовать switch оператор с перечислимыми значениями
  • , Вы хотите сделать свой код трудным понять
0
ответ дан 24 November 2019 в 00:45
поделиться

Статический импорт является единственной функцией “new” Java, который я никогда не использовал, и don’t намереваются когда-либо использовать, из-за проблем, которые Вы просто упомянули.

2
ответ дан 24 November 2019 в 00:45
поделиться

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

Один пример: код, который включает несколько ссылок на java.lang. Математика

Другой: класс разработчика XML, где, предварительно ожидая имя класса к каждой ссылке скрыло бы структуру, создаваемую

1
ответ дан 24 November 2019 в 00:45
поделиться

Я использую его для Цвета много.

static import java.awt.Color.*;

очень маловероятно, что цвета будут перепутаны с чем-то еще.

10
ответ дан 24 November 2019 в 00:45
поделиться

Эффективный Java, Второй Выпуск , в конце Объект 19 примечания, что можно использовать статический импорт при нахождении в большой степени константы использования от служебного класса. Я думаю, что этот принцип относился бы к статическому импорту и констант и методов.

import static com.example.UtilityClassWithFrequentlyUsedMethods.myMethod;

public class MyClass {
    public void doSomething() {
        int foo= UtilityClassWithFrequentlyUsedMethods.myMethod();
        // can be written less verbosely as
        int bar = myMethod();
    }
}

Это имеет преимущества и недостатки. Это делает код более читаемым за счет потери некоторой информации из первых рук о том, где метод определяется. Однако хороший IDE позволит Вам перейти к определению, таким образом, это не будет большой частью проблемы.

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

Редактирование: Обновленный, чтобы быть более характерным для методов, поскольку это - то, к чему относится этот вопрос. Принцип применяется независимо от того, что импортируется (константы или методы).

25
ответ дан 24 November 2019 в 00:45
поделиться

Я соглашаюсь, что они могут быть проблематичными с точки зрения удобочитаемости и должны использоваться экономно. Но при использовании общего статического метода они могут на самом деле увеличить удобочитаемость. Например, в тестовом классе JUnit, методы как assertEquals очевидны, куда они происходят из. Так же для методов от java.lang.Math.

11
ответ дан 24 November 2019 в 00:45
поделиться

Другое разумное использование для статического импорта с JUnit 4. В более ранних версиях методов JUnit как assertEquals и fail были наследованы, так как тестовый класс расширился junit.framework.TestCase.

// old way
import junit.framework.TestCase;

public class MyTestClass extends TestCase {
    public void myMethodTest() {
        assertEquals("foo", "bar");
    }
}

В JUnit 4, тестовые классы больше не должны расширять TestCase и могут вместо этого использовать аннотации. Можно затем статически импортировать утверждать методы от org.junit.Assert:

// new way
import static org.junit.Assert.assertEquals;

public class MyTestClass {
    @Test public void myMethodTest() {
        assertEquals("foo", "bar");
        // instead of
        Assert.assertEquals("foo", "bar");
    }
}

JUnit документы использование его этот путь.

61
ответ дан 24 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

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