Sie können testen, ob ein JAR versiegelt ist, indem Sie eine Klasse definieren, die in einem in der JAR-Datei verwendeten Paket vorhanden ist. Wenn das Glas versiegelt ist, sind normalerweise alle Verpackungen versiegelt, andernfalls können Sie sie pro Packung versiegeln. Die von Ihnen erstellte Klasse sollte dann versuchen, auf geschützte oder Standardmitglieder einer Klasse in diesem Paket zuzugreifen.
Wenn das JAR beispielsweise eine Klasse hat, com.example.Widget
in der das Paket com.example
versiegelt ist und Widget
geschützte / Standardmitglieder hat, erstellen Sie eine Klasse com.example.Test
, die versucht, auf diese Mitglieder zuzugreifen. Dies sollte fehlschlagen.
Der Grund für das Versiegeln ergibt sich aus einer Beschreibung des Testens: Sie möchten, dass Ihr Code in sich geschlossen ist und Benutzer des JAR nur öffentliche Mitglieder verwenden. Pakete müssen nicht für alle von einem Programm verwendeten Jars (und Bin-Ordner in Ihrer IDE) eindeutig sein. Sie können eine Klasse im selben Paket wie in einem JAR definieren und auf geschützte / Standardmitglieder zugreifen, die Probleme verursachen können. Häufig wird die Standardsichtbarkeit als Analogie zum friend
Schlüsselwort von C ++ verwendet, indem anderen Klassen im selben Paket die Möglichkeit gegeben wird, Aktionen auszuführen, die nur sicher sind, da dieselben Programmierer an beiden Klassen arbeiten und ihre Interna verstehen. Möglicherweise verzichtet eine Standard-Sichtbarkeitsmethode auf einige Grenzen, indem der Name der Leistung überprüft wird, mit dem Verständnis, dass Client-Code niemals darauf zugreifen wird. Zum Beispiel dieString
Die Klasse in Java verfügt über einige dieser Arten von Methoden, da die Behandlung von Zeichenfolgen blitzschnell sein muss, da eine große Menge Code darauf angewiesen ist. BigDecimal
basiert auf BigInteger
und verwendet den Standardzugriff, um einige Vorgänge zu optimieren, die andere Benutzer der Klasse nicht verwenden sollten.
TL; DR : Klassen im selben Paket können aus Gründen der Leistung oder Einfachheit auf nicht öffentliche Mitglieder zugreifen. Dieser Zugriff überprüft möglicherweise keine Invarianten und Voraussetzungen. Man kann Klassen im selben Paket an mehreren Stellen im Klassenpfad ablegen. Durch das Versiegeln eines Pakets oder JARs kann der Clientcode nicht auf diese Methoden zugreifen, da sonst möglicherweise Probleme auftreten.
Dies verursacht keine Probleme für Benutzer des Glases. Der Klassenlademechanismus, der auf Ressourcen (z. B. Klassendateien) in Gläsern zugreift, unterstützt versiegelte Gläser und Pakete vollständig.
Verwandte Themen: Versiegeln von Paketen in einer JAR-Datei