知道什么 class 实例化了一个 class

Know what class instantiated a class

基本上,我正在创建一个 API。我有多个端点,实现为控制器。如果调用端点,它会实例化解析器class,添加一些选项(如允许的参数等)。

但现在:如果解析器失败,我希望它显示一个很好的错误,包含 link 到实际失败的端点的文档。

我使用 b4j,它在 Java 之上工作,因此任何相关的 Java 代码都应该很容易转换。在 b4j 中,任何端点都类似于 class.

例如 我有一个 'getPOIByCity' 端点。

如果用户调用此方法,则需要城市参数。如果 he/she 省略参数,我希望用户收到包含以下内容的错误消息:

1 required parameter missing: city

See the documentation: http://www.link.to/doc/getPOIByCity

我的第一个想法是进行某种堆栈跟踪以了解哪个 class 实例化了解析 class,但我无法相信这是实现此目的的方法。

C# 具有更优雅的 'Caller information' 属性。

关于如何做到这一点的任何见解?

正如另一个戴夫已经提到的,将异常委托给调用 class(控制器)并从那里显示错误会更有意义。

但是为了回答您的问题,您可以使用

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

实现你想要的。