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

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

import static com.showboy.Myclass;

public class Anotherclass{}

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
452
0
141 862
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

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

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

The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification.

So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes. If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from. Importing all of the static members from a class can be particularly harmful to readability; if you need only one or two members, import them individually. Used appropriately, static import can make your program more readable, by removing the boilerplate of repetition of class names.

Я полностью согласен с предупреждениями @xsl выше. Одна из областей, где он определенно очень полезен, - это junit Assert: импортировать статический org.junit.Assert. * для всех ваших модульных тестов.

BxlSofty 18.01.2014 15:58

- для контрольной вставки очень длинного и не очень привлекательного файла документации вместо написания простых пояснений.

Błażej Michalik 23.10.2015 19:43

@xsl Нижняя часть сообщения должна быть в блоке цитаты? похоже, вы его набрали.

Ferrybig 19.02.2016 23:17

@Ferrybig: это цитата из связанной документации.

Joshua Snider 20.02.2016 00:50

Это как include в Ruby!

Chloe 25.10.2018 02:19

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

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;» не будет работать: импорт для класса, статический импорт для статических членов класса.

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

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

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

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

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

the difference between "import static com.showboy.Myclass" and "import com.showboy.Myclass"?

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

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

import static com.showboy.MyClass.*;

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

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

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

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

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

Будет ли что-нибудь значить, если писать import static java.lang.Math без звездочки?

Chris Middleton 26.02.2014 21:05

@AmadeusDrZaius нет, статический импорт предназначен только для статических членов класса.

Harry 11.01.2015 11:01

Хороший ответ! Поскольку многие «новички» читают этот пост, тем не менее, следует сделать одно небольшое предупреждение: Не злоупотребляйте звездочкой, чтобы предотвратить загрязнение пространства имен.

goerlibe 30.04.2017 13:01

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

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

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

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

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

Очень хороший пример. npt типичный с MAth в wwww ....

https://www.java2novice.com/java-fundamentals/static-import/

public class MyStaticMembClass {
 
    public static final int INCREMENT = 2;
     
    public static int incrementNumber(int number){
        return number+INCREMENT;
    }
}

в другом файле включить

import static com.java2novice.stat.imp.pac1.MyStaticMembClass.*;

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

Как разумно обнаружить нажатие клавиши без клавиши-модификатора?
Запечатанный класс во Flutter/Dart. Значение слова «библиотека» во Flutter / Dart
Дробь в fillMaxHeight внутри столбца не работает (составление Android Jetpack)
Как изменить объект события перед выполнением функции обратного вызова события DOM
Каково значение модификатора заполнения по умолчанию в Swift?
Как зациклить несколько расширений с прописными и строчными буквами, используя команду for
Как применить модификатор заливки к прямоугольнику SwiftUI с условным градиентом с помощью тернарного оператора
Как создать собственный модификатор для управления пользовательским представлением в SwiftUI?
При запуске приложения под ruby ​​2.3.1 с помощью команды rails server возникает следующая ошибка: не удается изменить замороженный массив (RuntimeError)
Проблема с наследованием C# при использовании универсальных шаблонов и модификатора new для скрытия родительского члена