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。一旦我彻底调试它就会回来。