I am trying to understand a issue I found on mutation and references in Java.
I am trying to point the reference of my list of messages to a new sublist of messages created by the function getMessageSublist
.
I would expect that after the updateMessage
, my list of messages would contain only one message(0), which was selected by the getMessageSublist
.
What I am doing wrong? How could I modify my code so that my code only print the message(0) (selected by the getMessageSublist
), considering that my getMessageSublist
always provide me a new list with copies of the messages.
class Message {
private String message;
public Message(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Message getCopy() {
return new Message(getMessage());
}
@Override
public String toString() {
return "Message{" + "message='" + message + '\'' + '}';
}
}
public class Test {
public static void main(String[] args){
List<Message> messages = new ArrayList<>();
for (int i=0;i<5;i++){
messages.add(new Message(Integer.valueOf(i).toString()));
}
updateMessages(messages);
for(Message msg: messages){
System.out.println(msg);//Actual: Prints 0 till 5, Expected print
// only 0, (selected in getMessageSublist).
}
}
private static void updateMessages(List<Message> messages) {
List<Message> sublistMessages=getMessageSublist(messages);
messages=sublistMessages;//Unsuccessfully tried to set the
// sublistMessages as my messages
}
private static List<Message> getMessageSublist(List<Message> messages) {
List<Message> sublist=new ArrayList<>();
sublist.add(messages.get(0).getCopy());
return sublist;
}
}