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

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

最佳答案

您的代码似乎是不完整的,因为您从未实际声明变量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对象,只是在每次迭代期间更改其值。

10-08 18:50