Знать, какой класс создал экземпляр класса - PullRequest
1 голос
/ 05 мая 2019

По сути, я создаю API. У меня есть несколько конечных точек, реализованных в виде контроллеров. Если вызывается конечная точка, она создает парсеркласс, добавляет некоторые параметры (например, разрешенные параметры и т. Д.).

Но теперь: если синтаксический анализатор не работает, я хочу, чтобы он выдал приятную ошибку, содержащую ссылку на документы конечной точки, которая фактически потерпела неудачу.

Я использую b4j, который работает поверх Java, поэтому любой соответствующий код Java должен легко конвертироваться. В b4j любая конечная точка похожа на класс.

например. У меня есть конечная точка getPOIByCity.

Если пользователь вызывает этот метод, требуется параметр city. Если он / она пропускает параметр, я хочу, чтобы пользователь получил сообщение об ошибке, содержащее:

1 обязательный параметр отсутствует: город

См. Документацию: http://www.link.to/doc/getPOIByCity

Моей первой мыслью было сделать какую-то трассировку стека, чтобы узнать, какой класс создал экземпляр класса parses, но я не могу поверить, что это способ сделать это.

C # имеет немного более элегантные атрибуты «Информация о вызывающем абоненте».

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 05 мая 2019

Как уже упоминал другой Дейв, было бы гораздо разумнее делегировать исключение вызывающему классу (контроллеру) и показать оттуда ошибку.

Но просто, чтобы дать ответ на свою проблему, вы можете использовать

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
String parentClass = stackTraceElements[2].getClassName();
Class cl = Class.forName(parentClass);

чтобы достичь того, что вы хотите.

...