Что означает модификатор «static» после «import»? - PullRequest
419 голосов
/ 02 октября 2008

При использовании так:

import static com.showboy.Myclass;

public class Anotherclass{}

В чем разница между import static com.showboy.Myclass и import com.showboy.Myclass?

Ответы [ 8 ]

370 голосов
/ 02 октября 2008

См. Документация

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

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

215 голосов
/ 02 октября 2008

Нет разницы между этими двумя типами импорта. Однако вы можете использовать статический импорт, чтобы разрешить неквалифицированный доступ к статическим членам других классов. Где я раньше делал это:

import org.apache.commons.lang.StringUtils;
      .
      .
      .
if (StringUtils.isBlank(aString)) {
      .
      .
      .

Я могу сделать это:

import static org.apache.commons.lang.StringUtils.isBlank;
      .
      .
      .
if (isBlank(aString)) {
      .
      .
      .

Вы можете увидеть больше в документации .

56 голосов
/ 02 октября 2008

Статический импорт используется для импорта статических полей / метода класса вместо:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

Вы можете написать:

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

Это полезно, если вы часто используете константу из другого класса в своем коде и если статический импорт не является неоднозначным.

Кстати, в вашем примере "import static org.example.Myclass;" не будет работать: импорт для класса, импорт статический для статических членов класса.

35 голосов
/ 19 сентября 2012

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

Я уточню свою точку зрения на примере.

import java.lang.Math;

class WithoutStaticImports {

 public static void main(String [] args) {
  System.out.println("round " + Math.round(1032.897));
  System.out.println("min " + Math.min(60,102));
 }
}

Тот же код со статическим импортом:

import static java.lang.System.out;
import static java.lang.Math.*;

class WithStaticImports {
  public static void main(String [] args) {
    out.println("round " + round(1032.897));
    out.println("min " + min(60,102));
  }
}

Примечание : статический импорт может затруднить чтение кода.

23 голосов
/ 14 октября 2009

разница между "import static com.showboy.Myclass" и "import com.showboy.Myclass"?

Первый должен генерировать ошибку компилятора, поскольку статический импорт работает только для импорта полей или типов элементов. (при условии, что MyClass не является внутренним классом или членом showboy)

Я думаю, вы имели в виду

import static com.showboy.MyClass.*;

, что делает все статические поля и элементы из MyClass доступными в фактическом модуле компиляции без необходимости их квалифицировать ... как объяснено выше

14 голосов
/ 31 января 2016

import позволяет программисту Java получать доступ к классам пакета без квалификации пакета.

Функция static import позволяет получить доступ к статическим членам класса без квалификации класса.

import обеспечивает доступ к классам и интерфейсу, тогда как static import обеспечивает доступ к статическим членам класса.

Пример:

С импорт

import java.lang.System.*;    
class StaticImportExample{  
    public static void main(String args[]){  

       System.out.println("Hello");
       System.out.println("Java");  

  }   
} 

С статический импорт

import static java.lang.System.*;    
class StaticImportExample{  
  public static void main(String args[]){  

   out.println("Hello");//Now no need of System.out  
   out.println("Java");  

 }   
} 

См. Также: Что такое статический импорт в Java 5

2 голосов
/ 22 декабря 2015

Допустим, у вас есть статические поля и методы внутри класса с именем MyClass внутри пакета с именем myPackage, и вы хотите получить к ним прямой доступ, набрав myStaticField или myStaticMethod без ввода каждый раз MyClass.myStaticField или MyClass.myStaticMethod.

Примечание: вам нужно сделать import myPackage.MyClass или myPackage.* для доступа к другим ресурсам

1 голос
/ 09 июня 2016

Модификатор static после import предназначен для извлечения / использования статических полей класса. Одна область, в которой я использую import static, предназначена для извлечения констант из класса. Мы также можем применить import static к статическим методам. Обязательно наберите import static, потому что static import неверно.

Что такое static import в Java - JavaRevisited - Очень хороший ресурс, чтобы узнать больше о import static.

...