Автобокс и распаковка - процессы времени компиляции.
Мы можем проверить с помощью небольшого теста, как описано ниже:
Создайте проект Java, скажем, с именем 'Crap'. Внутри этого создайте файл .java со следующим содержанием:
public class Crap {
private Boolean crap;
public Boolean getCrap() {
return crap;
}
public void setCrap(Boolean crap) {
System.out.println("lol.. this is crap!!");
this.crap = crap;
}
}
Создайте этот проект и экспортируйте как файл jar, скажем, crap.jar.
Теперь создайте еще один Java-проект, скажем, с именем 'Junk'. Добавьте файл crap.jar в путь к классам этого проекта, а затем создайте файл .java со следующим содержанием:
public class Junk {
public static void main(String[] args) {
Crap crap = new Crap();
crap.setCrap(true);
}
}
Теперь создайте проект Junk и запустите Junk.java как приложение Java. Он будет работать успешно, и результат будет
смеется .. это дерьмо !!
Теперь измените Crap.java, измените логическое дерьмо на логическое, а также соответствующие методы получения и установки. Код будет выглядеть так:
public class Crap {
private boolean crap;
public boolean getCrap() {
return crap;
}
public void setCrap(boolean crap) {
System.out.println("lol.. this is crap!!");
this.crap = crap;
}
}
Снова соберите этот проект и экспортируйте его как crap.jar. Поместите этот файл crap.jar в classpath проекта Junk (и удалите более ранний файл jar из его classpath).
Теперь, если вы попытаетесь запустить Junk.java как приложение java, вы получите ниже stacktrace:
Exception in thread "main" java.lang.NoSuchMethodError: crap.Crap.setCrap(Ljava/lang/Boolean;) at junk.Junk.main(Junk.java:9)