gpt4 book ai didi

java - 返回 new[] 时出现 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:16 26 4
gpt4 key购买 nike

我有一个非常奇怪的 NullPointerException 问题。代码示例如下:

...
... public String[] getParams(...) {
... ...
... ...
143 return new String[] {
144 getUserFullName(),
145 StringUtil.formatDate(sent),
. tiltu,
. StringUtil.initCap(user.getName()),
. vuosi.toString(),
. asiatyyppi[0] + " " + lisatiedot[0],
. asiatyyppi[1] + " " + lisatiedot[1],
. alaviitteet[0],
152 alaviitteet[1]};
153 }

现在,我在具有堆栈跟踪的生产中遇到了一个问题:

java.lang.NullPointerException
at package.EmailService.getParams(EmailService.java:143)
...

我自己无法生成那种堆栈跟踪。由于某些原因,行号不匹配可能是一些环境问题。如果我在任何变量堆栈跟踪上有空引用指向该特定行但从不指向第 143 行。

但我想问的是:是否可以在第 143 行专门产生 NullPointerException?

最佳答案

堆栈跟踪中的行号来自类文件中的 LineNumberTable 属性。 ( See JVM specification )

为子表达式输出正确的行号是没有问题的——编译器所要做的就是说从字节码索引 x 到 y 与源代码行 z 存在对应关系。

但是在 Java 1.7 之前(包括 Java 1.7),编译器中存在一个错误,该错误在 1.8 中得到了修复:

https://bugs.openjdk.java.net/browse/JDK-7024096

A DESCRIPTION OF THE PROBLEM : linenumbertable in compiled code only has line numbers for starts of statements. When a statement is using method chaining or other "fluent Interface" style API's a single statement can span tens of lines and contain hundreds on method invocations.

Currently an exception throw from within any of these methods will have the linenumber of the first line of the enclosing statement which makes it very hard to debug which method call is having a problem.

linnumbertable should have correct line numbers for every method invocation.

--

BT2:EVALUATION

It seems simple enough to fix this, but its kinda risky at the end of the jdk7 development cycle, targetting to jdk8.

所以在 1.7 中,你会得到这些子表达式的错误报告行号(如果它们出现在同一个方法中 - 如果你在子表达式中调用另一个方法,并且那个另一个方法导致了 NullPointerException,你会看到它在那里报告 - 这可能就是为什么这个错误并不总是一个大问题)

解决此问题的一种方法是使用 Java 8 编译器编译源代码,并使用标志 javac -source 1.7 -target 1.7。但是将您的生产环境升级到 1.8 会更好更安全。

关于java - 返回 new[] 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30160340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com