我正在使用Eclipse进行调试,并获得了一个匿名实例化的接口参数。有没有办法找出它的创建地点?
答案 0 :(得分:3)
除非您从应用程序的开始逐步进行调试,否则没有直接的方法可以找到使用Eclipse进行实例化的位置。
我发现实现这一目标的最佳方法是在所有* .java文件中执行文件搜索(ctrl + h,文件搜索选项卡)并搜索new "yourInterface"() {
。这将找到您在代码中实例化该接口的所有位置。
如果你能够通过工作集缩小范围,那么将简化查找找到的地点的位置。
答案 1 :(得分:3)
在调试时,您可以在Debug透视图中看到实际的堆栈跟踪,只需在执行停止处的断点处单击返回跟踪,直到找到创建匿名类实例的方法。 / p>
这是返回实例的调用
点击F3
找到方法。
答案 2 :(得分:0)
您可以暂时修改代码,使用任何参数(例如null
)调用此接口,然后再进行操作。
<强>更新强>
java.lang.reflect.Type
是在JVM中加载的基本接口实例。
此类型用于描述字段,方法,类等中的泛型。对于现场声明
List<? extends Foo> fooList = new ArrayList<Foo>();
它对应<? extends Foo>
。要查找此声明,您可能需要:
toString()
并在代码中搜索是否出现Type
实例查找或向我们展示更多信息Field.getType
或Method.getGenericParameterTypes()
)答案 3 :(得分:0)
我没有进一步跟踪这个问题,因为我使用了其他解决方案。但是我帮助的是这段代码,其中变量“genericType”是匿名实例化的接口:
// Ensure that we're handling only List<MediaEntity> objects.
boolean isWritable;
if (List.class.isAssignableFrom(type) && genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
Type[] actualTypeArgs = (parameterizedType.getActualTypeArguments());
isWritable = (actualTypeArgs.length == 1 && actualTypeArgs[0].equals(MediaEntity.class));
} else {
isWritable = false;
}