嗨,我试图将项目从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的类编写得很糟糕?
我的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
发布于 2014-02-26 08:40:35
我公司的大学解决了这个问题。
汉克雷斯特的惯例是有一种匹配方法。但这可以写得更好,前。检查方法是否有覆盖注释。
我的解决方案是删除第二个方法(也可以重命名)。在JDK6上,它靠运气工作;)
谢谢你,乔,你的刺激。
https://stackoverflow.com/questions/20804174
复制相似问题