如何将一个对象转换为另一个对象
How to cast one object into another
我是 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
对象16=] 使用 hibernate3
xml 映射方法。 HIbernate
Employee
对象而非 User
存在映射。因此,我尝试使用以下概念进行转换,即 java 中的所有内容都是一个对象,但它仍然给出 ClassCastException
的 RuntimeException :
User u = new User(12,"johnson","pam",new Date());
Object o = u;
Employee e=(Employee)o;
请问还有其他方法可以解决这个问题吗?没有更改现有 class 层次结构或包含任何其他继承结构的选项。
您不能将 user
对象转换为 employee
对象,因为它们没有任何关系。你应该有一些 Mapper
class 将 User
对象映射到 Employee
对象。
class UserToEmployee{
public Employee map(User user){
Employee e = new Employee();
e.setUserId(user.getUserId());
// so on set all the required properties
return e;
}
}
然后像这样使用它:
User u = new User(12,"johnson","pam",new Date());
UserToEmployee mapper = new UserToEmployee();
Employee e = mapper.map(u)
您根本无法在 Java 中投射对象。您可以将引用转换为由引用对象实现的类型。
您可以做的是将从一个对象转换为一个新对象。如果不能修改类,可以写一个外部转换器。例如:
public class EmployeeFactory {
public static Employee toEmployee( User user ) {
Employee emp = new Employee();
emp.setUserId( user.getUserId() );
emp.setUserName( user.getUserName());
return emp;
}
}
因为Employee
和User
是完全不同的两个对象,所以你不能像你的情况那样进行转换
一个简单的例子
用户
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 extends User {
//constructor
}
那你可以这样做
Employee e = new Employee();
Object o = e;
User = (Employee) o;
当然,在这种情况下,您不能做相反的事情:将User
转换为Employee
希望这个小例子能帮助你清楚地了解这个案例。
在 java 中,考虑转换对象的一种简单方法是:"Am I lying?"
也就是说,如果我将 User 转换为 Employee,我就是说 User 是 Employee。我在撒谎吗?如果是这样,演员表将起作用。如果没有,那么它不会。现在,根据您的逻辑,您希望所有员工都是用户。要建立"is-a"关系,可以使用"extends"
这个词
class User{
//Your things
}
class Employee extends User{
//More employee-specific things
}
现在如果你这样做
User john=new User(//args);
你可以做到
if(john instanceof Employee){//Make sure john is an employee
Employee johnEmployee=(Employee)john
}
所有转换都是重新标记对象。但是你不能在对象制作时没有确定的任何事情上撒谎。
我是 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
对象16=] 使用 hibernate3
xml 映射方法。 HIbernate
Employee
对象而非 User
存在映射。因此,我尝试使用以下概念进行转换,即 java 中的所有内容都是一个对象,但它仍然给出 ClassCastException
的 RuntimeException :
User u = new User(12,"johnson","pam",new Date());
Object o = u;
Employee e=(Employee)o;
请问还有其他方法可以解决这个问题吗?没有更改现有 class 层次结构或包含任何其他继承结构的选项。
您不能将 user
对象转换为 employee
对象,因为它们没有任何关系。你应该有一些 Mapper
class 将 User
对象映射到 Employee
对象。
class UserToEmployee{
public Employee map(User user){
Employee e = new Employee();
e.setUserId(user.getUserId());
// so on set all the required properties
return e;
}
}
然后像这样使用它:
User u = new User(12,"johnson","pam",new Date());
UserToEmployee mapper = new UserToEmployee();
Employee e = mapper.map(u)
您根本无法在 Java 中投射对象。您可以将引用转换为由引用对象实现的类型。
您可以做的是将从一个对象转换为一个新对象。如果不能修改类,可以写一个外部转换器。例如:
public class EmployeeFactory {
public static Employee toEmployee( User user ) {
Employee emp = new Employee();
emp.setUserId( user.getUserId() );
emp.setUserName( user.getUserName());
return emp;
}
}
因为Employee
和User
是完全不同的两个对象,所以你不能像你的情况那样进行转换
一个简单的例子
用户
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 extends User {
//constructor
}
那你可以这样做
Employee e = new Employee();
Object o = e;
User = (Employee) o;
当然,在这种情况下,您不能做相反的事情:将User
转换为Employee
希望这个小例子能帮助你清楚地了解这个案例。
在 java 中,考虑转换对象的一种简单方法是:"Am I lying?" 也就是说,如果我将 User 转换为 Employee,我就是说 User 是 Employee。我在撒谎吗?如果是这样,演员表将起作用。如果没有,那么它不会。现在,根据您的逻辑,您希望所有员工都是用户。要建立"is-a"关系,可以使用"extends"
这个词class User{
//Your things
}
class Employee extends User{
//More employee-specific things
}
现在如果你这样做
User john=new User(//args);
你可以做到
if(john instanceof Employee){//Make sure john is an employee
Employee johnEmployee=(Employee)john
}
所有转换都是重新标记对象。但是你不能在对象制作时没有确定的任何事情上撒谎。