【发布时间】:2019-04-24 10:43:18
【问题描述】:
我有一组 Web 服务,它们被带有 @AfterThrowing 的 Aspect 拦截。 Web 服务的实现是在 Kotlin 中完成的,但它是基于生成的 Java 代码。
所以我有一个 Java 接口和一个实现该接口的 Kotlin 类。当代码抛出时,我想一般地在 Java 接口中抛出定义的错误(SomeFault):
public SomeResponseType methodName() throws SomeFault
如果一切都在 Java 中,它可以像这样很容易地完成:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception>[] declaredExceptions = methodSignature.getExceptionTypes();
...然后执行declaredExceptions[0]的构造函数
但是当我在 Kotlin 中做类似的事情时,我似乎找不到 Java 接口中声明的异常:
val declaredExceptions = methodSignature.exceptionTypes
...给我一个空列表
问题:在拦截实现该接口的 Kotlin 类时,如何找到在 java 接口中声明的异常?
【问题讨论】:
-
接口是 Java,不是 Kotlin。我想要的是从我的帖子中找出“SomeFault”。接口和 aspectJ 方面的实现在 Kotlin 中。
-
如果我理解正确,您正在检查的是 Kotlin 子类的方法的签名。因此,如果您希望它具有声明的抛出异常,请使用 Throws。否则,不要检查该方法,而是检查 Java 接口的重写方法
-
你是对的,我现在根据你的答案找到了一个解决方案,我只是错误地认为这在纯 Java 和 Java/Kotlin 混合世界中的工作方式相同。