Вы можете использовать Манифольд @ Jailbreak для прямого, безопасного типа отражения Java:
@Jailbreak Foo foo = new Foo();
foo.callMe();
public class Foo {
private void callMe();
}
@Jailbreak
разблокирует локальную переменную foo
в компиляторе для прямого доступа ко всем членам в иерархии Foo
.
Аналогичным образом вы можете использовать метод расширения jailbreak () для одноразового использования:
foo.jailbreak().callMe();
С помощью метода jailbreak()
вы можете получить доступ к любому члену в иерархии Foo
.
В обоих случаях компилятор разрешает вызов метода для вас безопасно, как если бы это был публичный метод, в то время как Manifold генерирует эффективный код отражения для вас под капотом.
В качестве альтернативы, если тип не известен статически, вы можете использовать Структурная типизация , чтобы определить интерфейс, который может удовлетворить тип, не объявляя его реализацию. Эта стратегия поддерживает безопасность типов и позволяет избежать проблем с производительностью и идентификацией, связанных с рефлексией и прокси-кодом.
Узнайте больше о Коллектор .