我在windows下运行Java 1.7.0_17和Jboss 4.2.3GA的类中有一点代码。代码是这样做的:
Date newNextDate = inBetween(currentDate, nextDate, start);
print("newNextDate=" + newNextDate);
inbetween 做了一个相当简单的比较:
private Date inBetween(Date start, Date end, Date test) {
...
Date contains = t.contains(test) ? test : end;
print("returning contains=" + contains);
return contains;
}
确切的实现 contains 与恕我直言无关,因为最终导致 java.util.Date 被分配给 contains 变量。标准输出的输出是:
16:44:56,153 INFO returning contains=Tue Apr 30 23:59:59 CEST 2013
16:44:56,153 INFO newNextDate=null
这就是神秘开始的地方: 1. 就在 return 语句之前,contains 变量有一个值 2.返回后收集变量为null
这怎么可能?
- 是的,我们已经检查过是否恰好调用了这个 inbetween 方法,否则它不会打印输出。
- 没有,没有同名的实例变量。但即使,中间什么也没有发生。
- 不,我们无法调试该过程,因为它只发生在我们的生产服务器上,无法在开发中重现。
最奇怪的是,它只出现在这里,在 1.000.000 行代码中没有其他地方出现。
最佳答案
也许你已经重载了你的 inBetween 并且它被调用了:
private Date inBetween(long start, Date end, Date test) {
Date result = null;
inBetween(new Date(start), end, test);
return result;
}
或者类似的典型。 catch ... 返回 null
。
唯一的其他技术方法是让 AOP 拦截器执行错误的缓存(内存?)等等。不太可能。
关于java - 不可能的 Java 方法调用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943611/