[英]How to in a simple way cast one object to another when they both inherit from the same class
[英]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
因为在应用程序中,我将使用hibernate3
xml映射方法用于持久化到database
的方法之一来接收User
对象。 HIbernate
映射存在于Employee
对象,而不存在于User
。 因此,我尝试使用以下概念尝试进行转换,即Java中的所有内容都是一个对象,但仍然提供ClassCastException
的RuntimeException:
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;
}
}
您不能将user
对象转换为employee
对象,因为它们没有任何关系。 您应该有一些Mapper
类,它将一个User
对象映射到Employee
Object。
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)
因为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中,考虑转换对象的一种简单方法是:“我在说谎吗?” 即,如果我将用户强制转换为员工,则表示用户是员工。 我在说谎吗 如果是这样,强制转换将起作用。 如果没有,那就不会了。 现在,根据您的逻辑,您希望所有员工都成为用户。 要建立“是”关系,可以使用“扩展”一词
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
}
所有的转换都是重新标记一个对象。 但是,您不能对创建对象时未建立的任何内容撒谎。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.