Создание экземпляра объекта при отсутствии зависимости (Java) - PullRequest
3 голосов
/ 27 апреля 2011

Ребята, может кто-нибудь объяснить следующий сценарий:

1) Веб-приложение имеет module1.jar в своем каталоге lib. В этом модуле есть класс A:

package module1;
import module2.B;
public interface IA {   
    void methodOk() {}

    void methodWithB(B param) {}
}

package module1;
import module2.B;
public class A implements IA {
    public A() {}

    //...
void methodWithB(B param) {
    //do job on B
}
}

2) module2.jar отсутствует - его нет в пути к классам.

3) Приложение может создавать объекты класса A, хотя в нем отсутствует зависимость. В приложении вызывается метод A.methodOk ().

Было бы здорово, если бы вы могли дать ссылку на любую спецификацию по этому вопросу. Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 27 апреля 2011

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

2 голосов
/ 27 апреля 2011

Если B не нигде не используется , то результирующий байт-код не будет иметь ссылки на module2.B, поэтому он компилируется. Нет зависимости, за исключением при компиляции в этом случае.

Если вопрос неясен и B используется где-то в A, то мне было бы интересно увидеть больше кода, чтобы попытаться определить, что происходит.

1 голос
/ 27 апреля 2011

Посмотрите на это с точки зрения загрузчика классов. Если вам никогда не нужно загружать класс, вам все равно, отсутствует ли байт-код для этого класса.

Ваш вопрос действительно: «Что вызывает загрузку классов?»

Две причины, которые я могу придумать, вне головы: - Строительство - Статический доступ

...