Запретите учрежденческий аппарат с выходом в городскую сеть класса Java вне его пакета

Как отметил farooq, местоположение файла для манифеста не имеет значения, если манифест отвечает всем требованиям для получения манифеста :

манифест задаются следующим алгоритмом. Алгоритм, в случае успеха, возвращает обработанный манифест и URL манифеста; в противном случае он завершается преждевременно и ничего не возвращает. В случае, если ничего не возвращается, пользовательский агент ДОЛЖЕН игнорировать декларацию манифеста. Выполняя эти шаги, пользовательский агент НЕ ДОЛЖЕН задерживать событие загрузки.

  1. Из Документа контекста просмотра верхнего уровня пусть origin будет источником документа, , а ссылка manifest будет первым элементом ссылки в древовидной структуре, атрибут rel которого содержит манифест токена. 112]
blockquote>

Таким образом, это нормально для манифеста Django Progressive Web App, и расположение файла должно основываться на соглашении проекта:



5
задан jjujuma 8 April 2009 в 13:17
поделиться

5 ответов

Сделайте так, чтобы конструкторы в Player имели только доступ к пакету. Тогда они не смогут вызывать конструктор или расширять его сами. Если у вас еще нет явного конструктора в Player , создайте его (иначе компилятор создаст открытый конструктор по умолчанию без параметров).

(Обратите внимание, что я предложил только сделать это конструктору . Сам класс может быть общедоступным, чтобы клиенты все еще могли его использовать.)

Это работает, потому что любой конструктор (кроме java.lang.Object ) должен вызывать конструктор суперкласса (явно или неявно). Если доступных конструкторов нет, вы не можете создать подкласс.

18
ответ дан 18 December 2019 в 06:12
поделиться

Убедитесь, что конструкторы Player не являются общедоступными:

public abstract class Player {
    Player() {
        // initialization goes here
    }
}

Тогда классы могут расширять Player из одного пакета, но не должно быть в состоянии снаружи пакета.

9
ответ дан 18 December 2019 в 06:12
поделиться

Хм ... сделать класс Player закрытым? Просто оставьте «public», тогда он будет закрытым для пакета, то есть только классы в одном и том же пакете могут его расширить.

Однако ничто не мешает людям размещать свои собственные классы в этом пакете. Я полагаю, что это можно предотвратить, поместив его в JAR со знаком, тогда любая попытка загрузить неподписанный (или другой подписанный) класс в один и тот же пакет потерпит неудачу.

0
ответ дан 18 December 2019 в 06:12
поделиться

I'd recommend

  • Create public interfaces for things you want clients to access but not create or subclass
  • Create public classes for things you want clients to access and create or subclass
  • anything else should be non-public

The problem with this approach is that you end up with everything needing to be in a single package, which is bad for organization as the library grows.

To allow use of multiple packages with protection, take a look at OSGi.

OSGi allows you to restrict which packages a bundle (jar) allows other bundles to access, and even set up "friend" bundles that are allowed extra visibility.

Java's package-as-protection-unit model is not sufficient when you really want to protect libraries that get large...

0
ответ дан 18 December 2019 в 06:12
поделиться

Используйте модификатор доступа по умолчанию, также известный как «Закрытый пакет». Другими словами, не указывайте модификатор доступа

abstract class Player { /*...*/ }

Документация здесь на веб-сайте Sun описывает все модификаторы доступа более подробно.

-1
ответ дан 18 December 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: