如何将一个对象转换为另一个对象

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;
    }
}

因为EmployeeUser是完全不同的两个对象,所以你不能像你的情况那样进行转换

一个简单的例子

用户

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
}

所有转换都是重新标记对象。但是你不能在对象制作时没有确定的任何事情上撒谎。