java - 不可能的 Java 方法调用行为

标签 java

我在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/

相关文章:

java - 如何按字符串中的电话簿字母顺序排列

java - 我不知道如何实现 ItemListener 和 ActionListener

java - Java 中的二进制到十进制转换器

java - 将java项目中的proto文件编译成python模块时如何避免嵌套导入

java - 我可以在 Java/Groovy 中以编程方式更改我的 Windows 桌面墙纸吗?

java - 使用 java 的 AWS Kinesis Lambda 转换 - 未返回一个或多个记录 ID

java - Jade 代理数据通讯

java - 什么是NullPointerException,我该如何解决?

java - 如何更改 EditText 的底线颜色?

java - 在 Java 中集成 LinkedIn 时出错