Можно ли запечатать классы в jar-файле?

Итак, я знаю, что можно запечатать пакет в jar-файле, установив для атрибута sealed значение true, но возможно ли сделать то же самое с записями классов в манифесте?

Будет ли работать этот закрытый атрибут ниже, если Boot.class существует или он предназначен только для пакетов?

Пример:

Манифест-Версия: 1.0

Имя: com/myCompany/randompackage/Boot.class 
Запечатано: правда 

1 ответ

Нет смысла запечатывать класс. Вы можете запечатать только пакет, потому что только пакет нуждается в защите. Нет необходимости защищать класс, потому что невозможно распространить содержимое одного класса на два файла. Можно только распределить классы одного пакета по двум JAR-файлам. И запечатывание означает предотвращение этого. И хотя это не значение по умолчанию, хорошая идея сделать его установленным по умолчанию.

пример

Алиса пишет пакет под названием alice, который содержит два класса alice.Data а также alice.Work, Класс Data содержит некоторые переменные, которые нельзя изменять. В противном случае код в классе Work может завершиться ошибкой. Алиса объявляет класс Data как частный пакет, потому что класс Work должен иметь доступ к данным. Теперь она помещает оба класса пакета в JAR под названием alice.jar и дает банку Бобу.

Но Бобу нужно сделать больше и попросить Мэллори написать еще один класс, потому что Алиса уже работает над чем-то другим. Так Мэллори пишет пакет под названием mallory и реализует необходимый класс под названием mallory.Work, Но Мэллори завидует и хочет дискредитировать Алису и пишет еще один класс под названием alice.Anger, И она помещает оба класса в банку под названием mallory.jar и дает банку Бобу.

Боб использует оба JAR-файла и сталкивается с проблемами с кодом Алисы, потому что класс alice.Anger от mallory.jar имеет частный доступ к пакету alice и разрушает данные в alice.Data,

Если бы Алиса запечатала свой JAR, Мэллори не смогла бы поставить класс в mallory.jar который принадлежит пакету alice, Java отклонит этот JAR, потому что уже есть другой JAR, содержащий пакет alice и каждый пакет должен быть только в одном банке.

Другие вопросы по тегам