所以我在玩geotools,我想我将代理他们的数据访问类之一,并跟踪它们在代码中的使用方式。

我编写了一个动态代理,并在其中包装了FeatureSource(接口),然后愉快地运行了。然后,我还想看一下FeatureSource返回的一些可传递对象,因为FeatureSource所做的主要工作是返回FeatureCollection(FeatureSource类似于sql DataSource,featurecollection类似于sql语句)。

在调用处理程序中,我只是将调用传递给了基础对象,并在执行过程中打印出了目标类/方法/ args和结果,但是对于返回FeatureCollection(另一个接口)的调用,我将该对象包装在了代理(同一个类,但有一个新实例,应该没关系吗?)并返回它。 AM!类广播例外: 通用标签

呼叫代码: 通用标签

代理: 通用标签

}

是否可以从代理接口动态返回接口的代理?还是我做错了? 欢呼!

有帮助吗?

解决方案

Class.getInterfaces()仅返回由类直接实现的接口。您需要一个传递闭包来获取所有接口。

更新

示例: 通用标签

您可能还需要“解开”作为参数传递的代理。

其他提示

@ maurice-perry的解决方案对我来说非常有效,我对此表示赞成,但我也确实想指出,有所需方法的库实现。

我最终使用Apache Commons库方法通用标记代码 通用标签

它对于 ClassUtils.getAllInterfaces() 通用标签

还有一种番石榴方法,使用: 通用标签

但是随后您必须弄清楚如何将newProxyInstance转换为Set<TypeToken>。如果您是Guava爱好者,那么也许微不足道,但是Apache可以使用了。

这两个相关线程中均提到了这两种情况,全部获取(派生)类的接口

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top