java:ClassCastException-[Ljava.lang.Long;无法转换为java.lang.Long

java:ClassCastException-[Ljava.lang.Long;无法转换为java.lang.Long,java,casting,Java,Casting,我使用red5,并使用IConnection类设置/获取属性,但这并不相关 “L”在java中表示长。因此0L是0类型的长,而不仅仅是0类型的整数“0” 以下错误消息中的[Ljava.lang.Long和java.lang.Long之间有什么区别: stack trace: java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to java.lang.Long 更新 代码示例: static Long getLong

我使用red5,并使用IConnection类设置/获取属性,但这并不相关

“L”在java中表示长。因此0L是0类型的长,而不仅仅是0类型的整数“0”

以下错误消息中的
[Ljava.lang.Long
java.lang.Long
之间有什么区别:

stack trace: java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to java.lang.Long

更新

代码示例:

 static Long getLongAttribute(IConnection conn, String attribute) {
    Long result=null;
    try {
        if (!conn.hasAttribute(attribute))
            throw new Exception(attribute +  " - Long attribute not found!");
      result = conn.getLongAttribute(attribute); // <--- ERRROR ON THIS LINE
    } catch (Exception e) {
        _handleException(e);
    }
    return result;
}
静态Long getLongAttribute(IConnection conn,String属性){
长结果=空;
试一试{
如果(!conn.hasAttribute(属性))
抛出新异常(属性+“-未找到长属性!”);

result=conn.getLongAttribute(attribute);//第一个对象是
Long
数组,第二个对象就是
Long
。试试这个

    Long l = 1l;
    Long[] l2 = {};
    System.out.println(l.getClass());
    System.out.println(l2.getClass());
输出

class java.lang.Long
class [Ljava.lang.Long;

但是我同意数组类型的表示法非常混乱。我想知道它是怎么变成这样的。

[Ljava.lang.Long
是一个
java.lang.Long
的列表


编辑:如下所述,这是一个数组。对不起,我键入得太快了…

您的代码尝试将
Long[]转换为Long
,这会导致
ClassCastException
我的代码所在位置出现类似问题

List rows=criteria.List();

但是我的条件只有count(*)投影,因此
criteria.list()
只返回
list
而不是
list

我把它改成了


List rows=criteria.List()

你能显示导致异常的代码吗?知道Long的所有点和Long的数组,但我想知道为什么这行会导致异常。我从红色5的文档中得到的信息是,该方法返回Long,而不是Long的数组,那么为什么异常……@Vishwanath:看起来实际问题在
con的某个地方n、 getLongAttribute
调用。问题中的代码没有强制转换,但是如果没有完整的堆栈跟踪,很难准确地说出问题所在。如果类型与
result=conn.getLongAttribute
不匹配,编译器将捕获它。从技术上讲,是一个长数组:即
Long[]
@Cameron Skinner:meh,我转过身去做了其他事情,注意到了我的错误,现在已经太晚了…;)但是,是的,你是对的。@Cameron Skinner:没有什么不好的感觉;)表示是数组类的二进制类名。它在JVM规范中指定,在设计人员尝试使用内部类型名时也是如此实际上是非法的,以防止任何人故意使用这些内部类型名声明变量。因此,您必须将某些内容声明为
Long[]
,而不是
[Ljava.lang.Long
@Stephen这正是问题所在,为什么不使用更友好的表示法(例如,
java.lang.Long[]
)。这并不是说有任何技术上的困难。@TMN您能澄清一下吗?使用那些内部类型名声明变量会有什么问题吗?@TMN-不相信他们需要这样做……在Java 1.1和更高版本的环境中。@Nikita-设计决策可能是在Java 1.0之前做出的。错误是de,无法更正。这可能是其中之一。