2017-02-28 133 views
0

将用户详细信息添加到arr数组后,所有元素都变为相同的值。请解释如何去做。添加到数组对象中更改相同的值java

@Autowired UserDto userDto;

public ArrayList getAllUsers() throws commonException { 
     ArrayList<UserDto> arr = new ArrayList<>(); 
     Iterable<User> user = userRepository.findAll(); 
     for(User userDetails: user){ 
      userDto.setUsername(userDetails.getUsername()); 
       userDto.setEmail(userDetails.getEmail()); 
       userDto.setPassword(userDetails.getPassword()); 
       arr.add(userDto); 
     } 



     return arr; 
+1

当您添加一个对象数组或一个集合,只有*参考*的对象添加,而不是该对象的副本。所以引用总是引用该对象的* current *内容。 – RealSkeptic

回答

1

您的代码似乎是不完整的,因为你从来没有真正声明变量userDto也不是初始化。然而,我怀疑你的问题的解决方案是确保你初始化一个新的UserDto POJO的每个迭代的循环。事情是这样的:

for (User userDetails: user) { 
    UserDto userDto = new UserDto();  // CRITICAL 
    userDto.setUsername(userDetails.getUsername()); 
    userDto.setEmail(userDetails.getEmail()); 
    userDto.setPassword(userDetails.getPassword()); 

    arr.add(userDto); 
} 

你结束了同一个用户的多个副本的原因是目前你被重用相同UserDto对象,每次迭代中仅仅改变自己的价值观。

0

您需要每次都创建一个新对象,因此请在循环中添加此对象。

UserDto userDto = new UserDto(); 
0

您需要首先实例UserDto:

for(User userDetails: user){ 

    //You need to add this 
    UserDto userDto = new UserDto(); 

    userDto.setUsername(userDetails.getUsername()); 
    userDto.setEmail(userDetails.getEmail()); 
    userDto.setPassword(userDetails.getPassword()); 

    arr.add(userDto); 
}