解释 JVM 类转换异常错误消息 - 无法转换的原始类型是什么
我有一个 Java 生产系统,其中 IBM JVM 在 Linux 上运行。
客户报告在日志中打印以下异常:java.lang.ClassCastException:[B 与 java.lang.String 不兼容
当尝试转换从以下位置返回的各个属性时:javax.naming.directory.InitialDirContext(...)
从这个异常中我无法弄清楚无法转换为 String 的类型是什么。什么是“B”?
通常,我知道类转换错误消息应该如下所示:java.lang.ClassCastException:java.lang.Integer与java.lang.String不兼容
但正如您所看到的,第一个打印输出中的情况并非如此。
我以为可能有一个名为 B 的实际类,但我可以在 javax.naming 下找到一个...
这里是否存在名称混淆?
我现在计划向客户发送一个版本,该版本将在尝试转换为字符串之前打印出实例的类:i.getClass().getCanonicalName()
但是这些乒乓球需要一周的时间,如果你有一个想法并能在此之前帮助我,那就太棒了!
I have a Java production system with IBM JVM running on Linux.
A customer reports the following exception printed to the log:java.lang.ClassCastException: [B incompatible with java.lang.String
When trying to cast the individual attributes returned from: javax.naming.directory.InitialDirContext(...)
From this exception I can't figure out what is the type that could not be converted to String. What is "B"?
Normally, I know that a class cast error message should look something like this:java.lang.ClassCastException: java.lang.Integer incompatible with java.lang.String
But as you can see it's not the case in the first printout.
I thought that there might be an actual class named B, but I could find one under javax.naming...
Is there a name obfuscation going on here?
I now plan to send the customer a version that will print out the class of the instance before trying to cast to string:i.getClass().getCanonicalName()
But these ping pongs take a week, if you have an idea and could help me out before that, that would be super!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
[B
是一个byte
数组(即byte[]
)。请注意,[
是名称的一部分。请参阅
Class 的 API .getName()
了解如何生成这些名称的规则。[B
is an array ofbyte
(i.e. abyte[]
). Note that the[
is a part of the name.See the API for
Class.getName()
for the rules on how those names are produced.