Você pode testar se um jar está selado, definindo uma classe para existir em um pacote usado no arquivo jar. Se o frasco estiver selado, todas as embalagens serão normalmente lacradas; caso contrário, você poderá selá-las por embalagem. A classe que você cria deve tentar acessar membros protegidos ou padrão de uma classe nesse pacote.
Por exemplo, se o jar tiver uma classe em com.example.Widget
que o pacote com.example
está selado e Widget
tiver membros protegidos / padrão, crie uma classe com.example.Test
que tente acessar esses membros. Isso deve falhar.
O motivo do selamento segue uma descrição de como testá-lo: você deseja que seu código seja independente e os usuários do jar devem usar apenas membros públicos. Não é necessário que os pacotes sejam exclusivos entre jars (e pastas bin no seu IDE) usados por um programa. Você pode definir uma classe no mesmo pacote que em um jar e acessar membros protegidos / padrão que podem causar problemas. Freqüentemente, a visibilidade padrão é usada como um análogo à friend
palavra-chave do C ++, permitindo que outras classes no mesmo pacote executem ações que são seguras apenas porque os mesmos programadores trabalham em ambas as classes e entendem seus elementos internos. Talvez um método de visibilidade padrão renuncie a alguns limites de verificação no nome do desempenho, com o entendimento de que o código do cliente nunca o acessará. Por exemplo, oString
A classe em Java possui alguns desses tipos de métodos, pois o manuseio de String precisa ser rápido, porque uma grande quantidade de código depende disso. BigDecimal
é construído sobre BigInteger
e usa o acesso padrão para otimizar algumas operações que outros usuários da classe não devem usar.
TL; DR : as classes no mesmo pacote podem acessar membros não públicos entre si por desempenho ou simplicidade. Esse acesso pode não verificar invariantes e pré-condições. Pode-se colocar classes no mesmo pacote em vários locais no caminho de classe. A vedação de um pacote ou jar impede que o código do cliente acesse esses métodos, pois pode quebrar outras coisas.
Isso não causará problemas para os usuários do jar. O mecanismo de carregamento de classe que acessa recursos (por exemplo, arquivos de classe) em jars suporta totalmente jars e pacotes selados.
Leitura relacionada: Selando Pacotes em um Arquivo JAR