更改实体字段类型,引用实体的类会重新编译【java.lang.NoSuchMethodError】
来源:互联网 发布:2017年国产动漫数据 编辑:程序博客网 时间:2024/05/22 16:51
项目中遇到一个问题,把实体对象的一个字段从Integer更改为int,更改完后把对应的class文件重新部署到应用中,运行后报Exception in thread "main" java.lang.NoSuchMethodError,感觉很奇怪,于是分析了一下。
以下是在MyEclipse里进行测试分析
步骤一:写两个java类Entity.java,Test.java
package org.test;public class Entity {private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}
package org.test;public class Test {public static void main (String[] args) {Entity change = new Entity();change.setAge(18);System.out.println(change.getAge());}}
步骤三:保存Test.class,将Entity中的Age字段由Integer改为int,如下
package org.test;public class Entity {private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
步骤四:用步骤三保存的Test.class替换新生成的Test.class
步骤五:运行Test报错:Exception in thread "main" java.lang.NoSuchMethodError: org.test.Entity.setAge(Ljava/lang/Integer;)V
at org.test.Test.main(Test.java:6)
分析:
步骤一编写完Test.java后,Test.class反编译的代码如下
package org.test;import java.io.PrintStream;public class Test{ public static void main(String[] args) { Entity change = new Entity(); <span style="color:#ff0000;">change.setAge(Integer.valueOf(18));</span> System.out.println(change.getAge()); }}步骤三修改Entity.java后,Test.class反编译代码如下
package org.test;import java.io.PrintStream;public class Test{ public static void main(String[] args) { Entity change = new Entity(); <span style="color:#ff0000;">change.setAge(18);</span> System.out.println(change.getAge()); }}
通过对比可发现,修改Entity.java后,Test.class重新编译了,部署应用的时候若只替换了Entity.class,Test.class还是旧版本的,
旧版本Test.class中change.setAge(18)编译的结果是setAge(Integer.valueOf(18)),而现在Entity已经改为setAge(int age),找不到对
应的setAge(Integer age)方法,自然就提示
Exception in thread "main" java.lang.NoSuchMethodError: org.test.Entity.setAge(Ljava/lang/Integer;)V。
总结:
在MyEclipse中编辑修改实体字段类型后,引用该实体的对象都会自动重新编译,若需重新部署应用,需要把这些修改的class文件都替换
- 更改实体字段类型,引用实体的类会重新编译【java.lang.NoSuchMethodError】
- 修改Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError
- List实体集合更改任意Model中某一个字段的值,其他Model值也一起变了,引用类型和值类型的问题
- Java的引用和实体
- 通过hibernate tool生成实体类时候数据库是nvarchar实体类会字段类型为Serializable
- jQuery easyui dataGrid 动态改变排序字段名,一般情况下,在使用的时候,我们会点击相应字段进行排序,这里以JAVA为例,后端的实体类字段有可能和数据库的字段不一致; 如:实体类中的
- java的实体类
- java使用MongoDB更新实体类某一字段的值
- JAVA对象的简单引用和实体
- XML的实体引用
- Java实体Date类型属性值无法保存到数据表对应字段的问题
- 9、Java实体类中时间类型的注解
- oracle类型和对应的java实体类
- 实体类忽略字段的序列化
- EF框架实体类映射成数据库字段的办法,未能找到类型或命名空间名称“NotMapped”(是否缺少 using 指令或程序集引用?)
- EF框架实体类映射成数据库字段的办法,未能找到类型或命名空间名称“NotMapped”(是否缺少 using 指令或程序集引用?)
- hibernate配置文件实体类,对应表中字段类型错误
- hibernate实体类注解时间类型字段笔记
- 机器学习算法的性能评估
- 1023. Have Fun with Numbers (20)【字符串操作】——PAT (Advanced Level) Practise
- hdoj2018--母牛故事
- 装饰模式实例与UML
- [iOS 开发问题解决]kCFStreamNetworkServiceTypeVoIP' is deprecated
- 更改实体字段类型,引用实体的类会重新编译【java.lang.NoSuchMethodError】
- 易错
- 三个有意思的php函数
- python核心编程-函数-内嵌函数
- windows溢出保护原理与绕过方法概览
- Lighty的Chunk设计
- 培训机构毕业的程序员被歧视的背后逻辑
- python核心编程-函数-装饰器
- MyBatis学习笔记二