Что означает "статический" модификатор после "импорта"?

При использовании следующим образом:

import static com.showboy.Myclass;

public class Anotherclass{}

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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;

}

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

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

Ответ 4

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

Я подробно расскажу о своем примере.

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));
  }
}

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

Ответ 5

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

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

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

import static com.showboy.MyClass.*;

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

Ответ 6

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

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

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

Пример:

С 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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

У вас будет меньше кода, если вы используете статический импорт, но если вы будете использовать более строго, это может быть трудно поддерживать позже на каком-то этапе.

  import static java.lang.System.*;    
  class StaticImportExample {  
     public static void main(String args[]){  
     out.println("Hello Moto"); //No need of System.out  
  }   
}