java - 如何将一个对象投射到另一个对象
问题描述
我是 Java 初学者,在我现有的公司应用程序中有以下 2 个 Beans/POJOS:
用户
public class User {
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
员工
public class Employee {
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
我想转换User
为,Employee
因为在应用程序中,我将在User
用于持久化到database
using hibernate3
xml 映射方法的方法之一中接收对象。HIbernate
映射存在于Employee
对象而不是User
. 因此,我尝试使用以下概念进行转换,即 java 中的所有内容都是一个对象,但它仍然给出 RuntimeException ClassCastException
:
User u = new User(12,"johnson","pam",new Date());
Object o = u;
Employee e=(Employee)o;
有没有其他方法可以解决这个问题?没有选项可以更改现有的类层次结构或包含任何其他继承结构。
解决方案
您根本无法在 Java 中转换对象。您可以将引用强制转换为被引用对象实现的类型。
您可以做的是将一个对象转换为一个新对象。如果你不能修改类,你可以写一个外部转换器。例如:
public class EmployeeFactory {
public static Employee toEmployee( User user ) {
Employee emp = new Employee();
emp.setUserId( user.getUserId() );
emp.setUserName( user.getUserName());
return emp;
}
}
推荐阅读
- javascript - 如何从一周的下一天创建日期对象,hh:mm 和 utc 偏移量
- drupal - 将 rel="nofollow" 应用于 drupal 7 中的字段
- django-rest-framework - 在使用 jwt 的项目中从 django-rest-auth 迁移到 dj-rest-auth
- bootstrap-4 - 引导脚本在 Blazor 应用程序中不起作用
- elasticsearch - 搜索常用前缀关键字时快速返回
- multithreading - 查找线程启动的原因
- pandas - Pandas - 扩大平均会话时间
- python - 如何使用 opencv-python 将分辨率更改为纵向模式值?
- terraform - 使用 Terraform 从范围中提取 IP
- ruby-on-rails - 如何定义自定义视图以在 Rails 5.2 中生成 xlsx 文件以供下载?