Почему не работает статический импорт?

Перешел к изучению статического импорта в Java. Создал класс A в котором есть статический метод B выводящий на консоль строку "Hi!". После этого создал класс Prog278 в который пытаюсь импортировать статический метод B но компилятор выдает ошибки указанные ниже. Подскажите как все таки импортировать данный статический метод в мою программу?

Класс со статическим методом

class A {
public static void B () {
    System.out.println ("Hi!");
}}

Класс в который импортируется статический метод

import static A.B;
class Prog278 {
public static void main (String args[]) {
    B();
}}

введите сюда описание изображения


Ответы (1 шт):

Автор решения: m. vokhm

Согласно спецификации языка, в объявлении импорта должно использоваться полное (англ. qualified) имя класса, то есть имя класса с указанием имени пакета. См. спецификацию:

The name must be qualified (§6.5.5.2), or a compile-time error occurs.

Пакет по умолчанию (англ. default package) (то есть пакет, к которому относятся классы, в которых не указано имя пакета), не имеет имени. Следовательно, классы, в которых не указано имя пакета, не могут иметь полного имени, поэтому их импортировать невозможно.

Поместите ваши классы в какую-нибудь директорию внутри вашей директории с исходниками, и добавьте в них объявление пакета с именем этой директории, что-то типа такого:

package mypackage;

class A {
  public static void B () {
    System.out.println ("Hi!");
  }
}

package mypackage;

import static mypackage.A.B;

public class C {
  public static void main(String[] args) {
    B();
  }
}

и всё заработает.

И кстати, не называйте методы (а также переменные и параметры методов) именами, начинающимися с большой буквы. Есть определенные соглашения, и несоблюдение их путает (и, следовательно, раздражает) читателей вашего кода. Погуглите "java naming conventions".

→ Ссылка