Рассмотрим этот случай:
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
Как правило, вы ожидаете, что компилятор установит ONE и TWO константы. Однако гарантируется ли такое поведение? Можете ли вы развертывать во время выполнения Class2 без Class1 в пути к классам и ожидать, что он будет работать независимо от компиляторов или это необязательная оптимизация компилятора?
РЕДАКТИРОВАТЬ: Почему это так? Ну, у меня есть константа, которая будет делиться между двумя концами приложения (клиентом и сервером над RMI), и было бы очень удобно в этом конкретном случае поместить константу в класс, который может находиться только на одной стороне этого деления ( поскольку он логически тот, который владеет этим постоянным значением), а не имеет его в произвольном классе констант только потому, что он должен быть разделен обеими сторонами кода. Во время компиляции его все один набор исходных файлов, но во время сборки он делится на пакет.