声明泛型以后,返回long值就不行。返回Objcet就可以

qq_33608244 2016-09-09 10:02:23
大家看一下我现在有一个方法。通过测试后报出异常java.lang.ClassCastException

测试代码如下:


public void testGetCountWithName() {

long lo = customerDAO.getCountWithName("mike3");
System.out.println(lo);

}



getCountWithName方法如下:

public long getCountWithName(String name) {
String sql = "SELECT count(name) FROM testmvc WHERE name = ?";
return getForValue(sql, name);
}


getForValue方法如下:

public <E> E getForValue(String sql, Object... args) {
Connection connection = null;
try {
connection = jdbcUtlis.getConnection();
return (E) queryRunner.query(connection, sql, new ScalarHandler(),
args);
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtlis.releaseConnection(connection);
}
return null;
}




getCountWithName 返回设置为Objcet就没有事,返回long行就报出ClassCastException
异常。请问下大家哪里出问题了。
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
盗袭者阿馋 2016-09-13
  • 打赏
  • 举报
回复
引用 4楼我是你的主体 的回复:
[quote=引用 3 楼 Taykee 的回复:]
泛型不接受基本数据类型,泛型参数必须是引用类型,如果是long应该使用包装类Long


java新特性不是自动装箱拆箱吗。而且我看老师这么写就没有事。他用的也是long 而不是Long。。。[/quote]自动拆箱机制不是写在泛型里面的。。。。
sky_08_06_02 2016-09-11
  • 打赏
  • 举报
回复
Romanceling 2016-09-11
  • 打赏
  • 举报
回复
引用 3 楼 Taykee 的回复:
泛型不接受基本数据类型,泛型参数必须是引用类型,如果是long应该使用包装类Long
+1
解开者 2016-09-10
  • 打赏
  • 举报
回复
打出来看看呗 queryRunner.query(connection, sql, new ScalarHandler(), args).getClass()
qq_33608244 2016-09-10
  • 打赏
  • 举报
回复
引用 3 楼 Taykee 的回复:
泛型不接受基本数据类型,泛型参数必须是引用类型,如果是long应该使用包装类Long


java新特性不是自动装箱拆箱吗。而且我看老师这么写就没有事。他用的也是long 而不是Long。。。
盗袭者阿馋 2016-09-09
  • 打赏
  • 举报
回复
泛型不接受基本数据类型,泛型参数必须是引用类型,如果是long应该使用包装类Long
awusoft 2016-09-09
  • 打赏
  • 举报
回复
SELECT count(name) 在不同的数据库中返回的结果不一定,sqlserver是Integer吧,oracle 11g返回的是Bigdecimal
dzq584462393 2016-09-09
  • 打赏
  • 举报
回复
你先看看你的queryRunner.query方法返回的确定是long吗

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧