java:ClassCastException-[Ljava.lang.Long;无法转换为java.lang.Long
我使用red5,并使用IConnection类设置/获取属性,但这并不相关 “L”在java中表示长。因此0L是0类型的长,而不仅仅是0类型的整数“0” 以下错误消息中的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
[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,无法更正。这可能是其中之一。