Java 将Long参数传递给具有签名findResults(String prop,Object val)的方法将转换为整数数据类型
我有一个定义如下的方法:Java 将Long参数传递给具有签名findResults(String prop,Object val)的方法将转换为整数数据类型,java,Java,我有一个定义如下的方法: findResults(String prop, Object val) { if(val instanceof String) //process String stuff else if(val instanceof Long) //process Long stuff else //process other stuff } 当我将一个长参数传递给上述方法时 findResults(quer
findResults(String prop, Object val) {
if(val instanceof String)
//process String stuff
else if(val instanceof Long)
//process Long stuff
else
//process other stuff
}
当我将一个长参数传递给上述方法时
findResults(query, 5L);
它将转换为整数数据类型,并执行最后一个else条件。
即使将参数作为Long.parseLong(“5”)
传递也不起作用。
在java中,如何将Long值作为参数传递
更新:
错误详细信息:
java.lang.IllegalArgumentException: Parameter value [5] did not match expected type [java.lang.Long (n/a)]
at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)
at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:27)
....
我看不出哪里出了问题: 下面的代码按预期打印“Long”
public static void main(String[] args) {
findResults("String", 5L);
}
static void findResults(String prop, Object val) {
if(val instanceof String)
System.out.println("String");
else if(val instanceof Long)
System.out.println("Long");
else
System.out.println("Other");
}
那么
finResults(“key”,新的Long(5))
呢?它对我来说很好5L
是Long
原语的字面意思。您的方法findResults()
需要一个对象,而不是原语。由于Java5引入了自动装箱,原语应该自动转换为Long
对象,正如其他人所指出的,这就是发生的情况。那么您使用的是低于5的JDK版本吗?或者您发布的代码不是导致您出现问题的实际代码?您错了。请提供证据。请注意,Long.parseLong(“5”)
仍然提供了一个Long原语。如果您想要一个Long
,您应该使用Long.valueOf(“5”)
。您真的不应该回答。不可复制的问题是离题的——你应该以适当的理由结束。不明白为什么要否决投票?这个问题对我来说仍然存在。以下是控制台上显示的错误:java.lang.IllegalArgumentException:参数值[5]与预期类型[java.lang.Long(n/a)]
实际代码太长,无法在此处发布,中间有多个方法调用。这个方法属于GenericJpaDAO类,我编写这个类是为了泛化和执行任何类型的JPQL。一旦我彻底调试它就会回来。