您好我尝试从java 6将项目迁移到java 7(JDK1.7.0_21)。 在一次测试中我注意到了失败。
更新: 我调试了这个问题。我得到了ReflectiveTypeFinder.findExpectedType。
public Class<?> findExpectedType(Class<?> fromClass) {
for (Class<?> c = fromClass; c != Object.class; c = c.getSuperclass()) {
for (Method method : c.getDeclaredMethods()) {
if (canObtainExpectedTypeFrom(method)) {
return expectedTypeFrom(method);
}
}
}
throw new Error("Cannot determine correct type for " + methodName + "() method.");
}
在JDK6和JDK7之间是从c.getDeclaredMethods()得到的不同顺序。我在两个版本上都检查了两个方法都会通过条件所以只关注哪个方法将首先列在清单上。
更新的问题是:hamcrest方法应该检查更多内容还是我的类正在扩展CustomTypeSafeMatcher?
My MyMatchedObjectMatcher有两个matchesSafely方法:
@Override
protected boolean matchesSafely(MyMatchedObject actualObject) {(...)}
和
protected boolean matchesSafely(List<MyMatchedObject> actualObjectList) {(...)}
我创建的最近报道的问题是:https://github.com/hamcrest/JavaHamcrest/issues/30。 但由于内部java方法的意外行为,我认为它可能不是Hamcrest问题..
使用Hamcrest 1.3
答案 0 :(得分:0)
我公司的大学解决了这个问题。
hamcrest中的约定是有一种匹配方法。但它可以更好地编写,例如。检查方法是否具有覆盖注释。
我的解决方案是删除第二种方法(也可以重命名)。在JDK6上它运气好;)。
PS:感谢Joe的刺激。