当前位置: 首页 > 面试题库 >

为什么NPE使用DatatypeConverter的静态方法?

吴俊风
2023-03-14
问题内容

我盯着这个简短的代码太久了,我一生都看不到它如何抛出NullPointerException第6行。为什么要使用NPE?

class ConvertTest {

    public static void main(String[] args) throws Exception {
        byte[] b = "Ha".getBytes("UTF-8");
        System.out.println("bytes: " + b.length);
        javax.xml.bind.DatatypeConverter.printBase64Binary(b);  // NPE!
    }
}

输出量

bytes: 2
Exception in thread "main" java.lang.NullPointerException
        at javax.xml.bind.DatatypeConverter.printBase64Binary(DatatypeConverter.java:547)
        at ConvertTest.main(ConvertTest.java:6)
Press any key to continue . . .

更新资料

虽然许多错误报告都指向1.7变体,但我惊讶地发现Eclipse被配置为使用1.6.0_32&TextPad找到了一个版本1.6.0-b105(甚至没有意识到已安装!)。

两个JRE都因该NPE而失败。


问题答案:

似乎在JDK7中的JAXB中存在错误,这一点在Camel上得到了证明:

https://issues.apache.org/jira/browse/CAMEL-4893

最终链接到java.net上JAXB项目中的此问题https://github.com/javaee/jaxb-v2/issues/860。

我不确定您是否遇到了同样的问题,但是也许尝试将JDK6与最新的JAXB版本一起使用,看看是否发生了相同的NPE。



 类似资料:
  • 问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。

  • 问题内容: 我正在为某门课程的一些代码编写解释,并且偶然使用了这些单词并且可以互换使用。我决定回过头来修正措辞,但在我的理解上遇到了一个漏洞。 据我了解,子例程是一个如果它不作用于一个类的实例(其作用仅限于其显式输入/输出),并且是一个如果它作用于一个类的实例(它可能带有消除导致实例不纯的副作用)。 这里有一个很好的讨论主题。请注意,根据接受的答案的定义,静态实际上应该是一个函数,因为永远不会隐式

  • 问题内容: 对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案: 为什么我要创建一个单例(无状态)而不使用静态方法? 如果对象没有状态,为什么需要一个对象实例? 问题答案: 通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。) 但是,在一些极端情况下,甚至 无状态 单例也可能有用: 您希望在可预见的将来用状态扩展它。 由于某些特定的 技术 原因,

  • 问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么呢 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。

  • 问题内容: 在静态上下文中,为什么不能调用的静态版本(而不是必须使用)? 编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗? 注意: 我并不是说应该使用a 而不 是非静态方法(这很明显- 如果是的子类,则a的of 可能返回或其他,必须在运行时确定)。 我是说我想知道为什么没有 两个 版本,一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法。如果不可能,那就不可能了,那就是答案

  • 根据我的理解,如果子例程不作用于类的实例(其作用仅限于显式输入/输出),则它是;如果子例程作用于类的实例,则它是(它可能会对实例产生副作用,使其不纯)。 关于这个话题,这里有一个很好的讨论。请注意,根据接受答案的定义,静态实际上应该是一个函数,因为实例从不隐式传递,而且它不能访问任何实例的成员。 不过,考虑到这一点,静态实际上不应该是函数吗? 我想确保我使用了正确的措辞。 有人能澄清一下吗?