org.hibernate.util.ReflectHelper.getConstructor 空指针异常
2015-08-05 10:08
330 查看
先给你们写我的解决方式,造福伸手党:
多半问题是出现在了构造里 你一定写了
1.检查你的构造是不是类型和实际类型不符
2.java.util.Date这个类比较个性.
3.保持你的构造参数名和类的成员变量名相同.
我是用3解决的,你们可以试试,虽然我还没找到依据.
重点说2和3.
假设我们有一个构造:
而你有这样一个属性列表:
这基本包含了你可能遇见的错误.
关于第2点,你的构造里不能直接写Date b.你要写成
关于第三点,如果你写成了
你觉得是一样的是吧,我也这么觉得...可就不行...必须和属性名相同.
我找到了抛出异常的部分:
所以,如果你有时间,并且感兴趣,找出原因,请回复我.
多半问题是出现在了构造里 你一定写了
select new (xxx,xxx,xxx) from xxx...
1.检查你的构造是不是类型和实际类型不符
2.java.util.Date这个类比较个性.
3.保持你的构造参数名和类的成员变量名相同.
我是用3解决的,你们可以试试,虽然我还没找到依据.
重点说2和3.
假设我们有一个构造:
public XXX(String a,Date b,BigDecimal Cc){ this.a = a; this.b = b; this.Cc = Cc; }
而你有这样一个属性列表:
private String a; private Date b; private BigDecimal Cc;
这基本包含了你可能遇见的错误.
关于第2点,你的构造里不能直接写Date b.你要写成
public XXX(String a,String b,BigDecimal Cc){ this.a = a; this.b = DateHelper.parseString(insertTime,null); this.Cc = Cc; }
public static Date parseString(String s,String format) throws ParseException{ <span style="white-space:pre"> </span>if(format==null) format = "yyyy-MM-dd HH:mm:ss"; <span style="white-space:pre"> </span>SimpleDateFormat df = new SimpleDateFormat(format); <span style="white-space:pre"> </span>return df.parse(s); }能看懂,是吧?看不懂google一下.
关于第三点,如果你写成了
public XXX(String a,String b,BigDecimal cc){ this.a = a; this.b = DateHelper.parseString(insertTime,null); this.Cc = cc; }
你觉得是一样的是吧,我也这么觉得...可就不行...必须和属性名相同.
我找到了抛出异常的部分:
public static Constructor More ...getConstructor(Class clazz, Type[] types) throws PropertyNotFoundException { 336 final Constructor[] candidates = clazz.getConstructors(); 337 for ( int i = 0; i < candidates.length; i++ ) { 338 final Constructor constructor = candidates[i]; 339 final Class[] params = constructor.getParameterTypes(); 340 if ( params.length == types.length ) { 341 boolean found = true; 342 for ( int j = 0; j < params.length; j++ ) { 343 final boolean ok = params[j].isAssignableFrom( types[j].getReturnedClass() ) || ( 344 types[j] instanceof PrimitiveType && 345 params[j] == ( ( PrimitiveType ) types[j] ).getPrimitiveClass() 346 ); 347 if ( !ok ) { 348 found = false; 349 break; 350 } 351 } 352 if ( found ) { 353 if ( !isPublic( clazz, constructor ) ) { 354 constructor.setAccessible( true ); 355 } 356 return constructor; 357 } 358 } 359 } 360 throw new PropertyNotFoundException( "no appropriate constructor in class: " + clazz.getName() ); 361 }注意看343行,有一个 `isAssignableFrom` 方法.
Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter. It returns true if so; otherwise it returns false. If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false. Specifically, this method tests whether the type represented by the specified Class parameter can be converted to the type represented by this Class object via an identity conversion or via a widening reference conversion. See The Java Language Specification, sections 5.1.1 and 5.1.4 , for details. Parameters: cls the Class object to be checked Returns: the boolean value indicating whether objects of the type cls can be assigned to objects of this class Throws: NullPointerException if the specified Class parameter is null. Since: JDK1.1 439 440 public native boolean More ...isAssignableFrom(Class<?> cls);我没有证据是不是来自于这,堆栈信息其实并没有打印它,只打印到了`getConstructor`方法343行的异常.
所以,如果你有时间,并且感兴趣,找出原因,请回复我.
相关文章推荐
- 理解SVG坐标系统和变换: transform属性
- Can you find it?
- Java 反射机制
- js继承如何实现继承?
- 上传大文件问题 413 (Request Entity Too Large)
- Program received signal SIGUSR1, User defined signal 1.解决方法
- linux环境安装Nginx
- [乐意黎原创] php 页面提示 Fatal error: Call to undefined function curl_init()
- HTML 列表中的dl,dt,dd,ul,li,ol区别及应用
- JSP基本语法
- Java多线程——<三>简单的线程执行:Executor
- velocity问题积累
- 南邮 OJ 1151 Find Your Present
- 开启“自修”模式
- 南邮 OJ 1150 整除的尾数
- JavaScript的作用域与作用域链
- for_each的用法
- JavaScript 常用方法总结
- linux grep命令详解
- 【我的技术我做主】致那些奋斗在测试界挨踢人们--聊聊技术、发展