java.lang.ClassCastException:无法将类java.lang.Integer强制转换为类java.lang.Long

在下面的示例中, jdbcTemplate.queryForList返回一个Integer对象,我们尝试将其直接转换为Long

public List findAll() {

        String sql = "SELECT * FROM CUSTOMER";

        List customers = new ArrayList<>();

        List> rows = jdbcTemplate.queryForList(sql);

        for (Map row : rows) {
            Customer obj = new Customer();

            obj.setID(((Long) row.get("ID"))); // the object is an Integer
            obj.setName((String) row.get("NAME"));

            customers.add(obj);
        }

        return customers;
    }

输出量

Caused by: java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long 
(java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap')
	at com.mkyong.misc.CustomerRepository.findAll(CustomerRepository.java:73)
	at com.mkyong.misc.CustomerRepository$$FastClassBySpringCGLIB$$7fc6ff36.invoke()
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
	at com.mkyong.misc.CustomerRepository$$EnhancerBySpringCGLIB$$f96f7027.findAll()
	at com.mkyong.StartApplication.startCustomerApp(StartApplication.java:103)
	at com.mkyong.StartApplication.run(StartApplication.java:72)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)

要解决此问题,请将其转换回原始Integer并将其转换为Long

obj.setID(((Integer) row.get("ID")).longValue());
	//obj.setID(((Long) row.get("ID")));

Java基础:

Integer num = 1;

	Long numInLong = num.longValue();	 // Integer to Long

	Long numInLong2 = Long.valueOf(num); // Integer to Long

参考文献

  • Java –将整数转换为Long
  • Long.valueOf JavaDocs )

翻译自: https://mkyong.com/java/java-lang-classcastexception-class-java-lang-integer-cannot-be-cast-to-class-java-lang-long/

你可能感兴趣的:(java.lang.ClassCastException:无法将类java.lang.Integer强制转换为类java.lang.Long)