Упаковка и импорт Java - где моя ошибка? - PullRequest
0 голосов
/ 22 мая 2018

Пытаясь выучить Java из книги Брюса Экеля, я не понимаю, почему компилятор не находит библиотеку, которую я хочу импортировать.Сначала я сделал это на Windows / Cygwin, а теперь на Centos 7, используя OpenJDK 1.8.0.Одинаковый результат на обеих платформах.

Эта строка:

import static t.b.u.*;

вызывает ошибку компиляции

$ javac TestPrint.java
TestPrint.java:2: error: package t.b does not exist
import static t.b.u.*;
                 ^

Я согласен, что пакет tb несуществует, но я действительно хотел импортировать пакет tbu .Почему компилятор игнорирует вас?

CLASSPATH устанавливается следующим образом:

$ export|grep CLASS
declare -x CLASSPATH="/home/bbausch/thinking-in-java"

Пакет представляет собой один файл:

$ cat /home/bbausch/thinking-in-java/t/b/u/Print.java

package t.b.u;
import java.io.*;

public class Print {
... etc ...

Ошибка, вероятно, настолько очевидна, что я ее не вижу,Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 22 мая 2018

Это определенно связано со спецификацией языка Java: https://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5.3

Эти две строки по сути запрашивают разные вещи:

import static t.b.u.*;

Этот оператор просит импортировать все статические методы из класс с именем u из пакет t.b.

import t.b.u.*;

Этот оператор просит импортировать все классы ниже t.b.u.

Статический импорт предназначен только для TypeName.Обычные операции импорта предназначены для пакета или определенного класса.

Примерно эквивалентный общий импорт для статического импорта будет следующим:

import t.b.u;

. При этом запрашивается импорт только класса u изпакет t.b.

В вашем конкретном примере вы, вероятно, захотите, чтобы этот оператор импортировал все статические методы класса Print.

import static t.b.u.Print.*;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...