Это не сработает. Механизм общих секретов обеспечивает способ специфицировать c пакета приватных методов. Если вы посмотрите на исходный код, вы увидите, что существует интерфейс «доступа», который предоставляет фиксированный набор методов. Интерфейс общих секретов для пакета java.lang
предоставляет некоторые методы для получения внутреннего байтового массива строки без его копирования. Но он не предоставляет метод, который делает то, что вы хотите.
Кроме того, метод isLatin1()
, к которому вы пытаетесь получить доступ, - это private
, а не пакет private, так что он все равно не может быть предоставлен. Если вы не измените это.
Короче говоря, вы не можете использовать SharedSecrets
для этого, если вы не готовы изменить исходный код OpenJDK и создать свою собственную JVM . Это может быть приемлемо для эксперимента, но есть много красных флажков для производственного использования.
Использовать отражение. Это более практично ... по модулю, что вы рискуете вызвать проблемы переносимости в будущем для вашего приложения. (Учтите, что внутреннее представление String
менялось 2 или 3 раза до сих пор с момента Java 1.1. Это может произойти снова.)