请考虑以下代码:
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
Run Code Online (Sandbox Code Playgroud)
所以,我想复制dum到dumtwo并更改dum而不影响dumtwo.但上面的代码并没有这样做.当我改变某些内容时dum,也会发生同样的变化dumtwo.
我想,当我说dumtwo = dum,Java 只复制引用.那么,有没有办法创建一个新的副本dum并分配给它dumtwo?
在我的应用程序架构中,我通常通过服务层将对象或对象列表从数据访问层发送到Web层,其中这些对象从DAO对象转换为DTO对象,反之亦然.Web层对DAO对象没有任何访问权限,DAO层不使用DTO.
为了演示,我通常将代码编写为:
@Transactional(readOnly = true)
public List<UserDTO> getAllUserAsUserDTO() {
List<UserDTO> userDTOs = new ArrayList<UserDTO>();
for(User user : getAllUser()) {
userDTOs.add(constructUserDTO(user));
}
return userDTOs;
}
private UserDTO constructUserDTO(User user) {
UserDTO userDTO = new UserDTO();
userDTO.setFullName(user.getFullName());
userDTO.setId(user.getId());
userDTO.setUsername(user.getUsername());
userDTO.setRole(user.getRole());
userDTO.setActive(user.isActive());
userDTO.setActiveText(user.isActive() ? "Active" : "Inactive");
return userDTO;
}
Run Code Online (Sandbox Code Playgroud)
这里用户是数据库实体:
@javax.persistence.Entity
@Table(name = "USER")
public class User extends Entity {
@Transient
private static final long serialVersionUID = -112950002831333869L;
private String username;
private String fullName;
private boolean active;
private …Run Code Online (Sandbox Code Playgroud) 我有两个具有相同属性名称的java类.如何将所有属性复制到另一个填充了data的bean.我不想使用传统的表单来复制属性,因为我有很多属性.
提前致谢.
1班
@ManagedBean
@SessionScoped
public class UserManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private String userSessionId;
private String userId;
private String name;
private String adress;
......................
Run Code Online (Sandbox Code Playgroud)
2级
public class UserBean {
private String userSessionId;
private String userId;
private String name;
....................
Run Code Online (Sandbox Code Playgroud) 我有一对类,其中一个的字段是另一个字段的子集,超集类的getter都是可预测的名字(getFoo()).有没有办法有效地将所有公共字段从超集类复制到子集类,或者至少自动生成代码来执行此操作.
我应该注意到:
编辑:一些简单的代码请求
public class SuperClass {
private int foo;
private int bar;
private float bat;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public float getBat() { return bat; }
}
public class SubClass {
private int foo;
private float bat;
}
//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }
// also acceptable would be some way to autogenerate all the assignment
// …Run Code Online (Sandbox Code Playgroud) 我有这个问题.但是我很难解释,因为我不知道使用的确切术语.希望有人能理解.我会试着尽力而为.我觉得这与此有很大关系parsing
说有两个班.在这两个类中我都有一些变量,比如字符串(只是为了简单起见,变量类型可以是任何变量),它们具有相似的名称.
Eg:
class ClassA{
String x,y,z;
}
class ClassB{
String x,y,z;
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要的是,我需要将一个类的变量值的值复制到其他类对应的变量.
Eg:
ClassA aa=new ClassA();
ClassB bb=new ClassB();
//set bb's variables
aa.x=bb.x;
aa.y=bb.y;
aa.z=bb.z;
Run Code Online (Sandbox Code Playgroud)
像那样.
但请注意,我需要的不是上述方法.我希望有一种方法可以编写一个简单的方法,以便它通过传递给它的名称来识别相关变量.然后它会相应地进行值赋值.
我想象的方法是这样的,
void assign(String val){
// aa.<val>=val
}
Run Code Online (Sandbox Code Playgroud)
例如,如果您传递bb.x给assign(...)方法,那么它将进行aa.x=bb.x分配.
希望这很清楚.必须有更好的方法来解释这一点.如果有人知道,请编辑帖子(+标题)以使其更清晰(但保存我的想法)..
如果有办法实现这一点,请告诉我.
谢谢!
比方说,我有一流的A公共领域x和y.让我们说我有另一个pojo类,B但它使用setter和getter,所以它有setX()和setY().
我想使用一些自动方式从实例复制A到B后端.
至少使用默认设置,Dozer's
Mapper mapper = new DozerBeanMapper();
B b = mapper.map(a, B.class);
Run Code Online (Sandbox Code Playgroud)
不会正确复制字段.
那么是否有一个简单的配置更改,允许我使用Dozer或其他库来完成上述操作?