@synapse_people

Нормально ли вызывать private-методы с определенными аннотациями при помощи рефлексии?

Всем привет!
Есть простой класс Test, который определяет private-метод, скажем test.
Данный метод позначается аннотацией @ Annot.
Нормально ли будет (со всех точек зрения):
- получить такой метод при помощи рефлексии
- method.setAccessible(true);
- вызвать
?

Дело в том, что этот класс также объявляет некоторое public-методы, которые могут вызыватся из других мест. При этом, необходимо, чтобы метод с Annot вызвать нельзя было.

Необходимо это для такой ситуации: методы с аннотацией Annot будут вызыватся (ядром приложения) если пришла команда от пользователя, при этом другие объекты не должны иметь права вызвать этот метод(есть костыль при помощи cglib, который проверяет, если имеется аннотация на методе - выбрасывает исключение).

П.с. решение с подпиской на события не предлагать... плиз)
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
@lgorSL
А почему бы не сделать, чтобы класс реализовывал два интерфейса? Ну или даже один - класс со всеми методами и интерфейс с "совсем публичными методами".

interface A{ int getX(); }

class B implements A {
   private int x;
   int getX(){return x;}
   void setX(int v){x = v;}
}

Наружу в явном виде класс B не отдавать, говорить, что это просто "какая-то реализация" интерфейса А. В ядре хранить его именно как объект класса B и вызывать что хочется.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Использовать рефлексию позволительно только разработчикам инструментальных средств и в редких случаях разработчикам фреймворков.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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