添加到数组对象更改相同的值java

时间:2017-02-28 08:22:57

标签: java arrays collections

在arr数组中添加userdetails后,所有元素都会更改为相同的值。请解释如何做到这一点。

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

3 个答案:

答案 0 :(得分: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对象,只是在每次迭代期间更改其值。

答案 1 :(得分:0)

每次都需要创建一个新对象,所以在循环中添加它。

UserDto userDto = new UserDto();

答案 2 :(得分: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);
}