You can't modify the incoming UserStatus reference, because Java is pass by value, but you can change its state if it's mutable.
public class UserStatus {
private String status;
public static void main(String [] args) {
String name = ((args.length > 0) ? args[0] : "stas");
User user = new User(name);
UserStatus status = new UserStatus();
System.out.println(String.format("before: user %s status %s\n", user.toString(), status.toString()));
user = insertNewUser(user, status);
System.out.println(String.format("after : user %s status %s\n", user.toString(), status.toString()));
}
public static User insertNewUser(User user, UserStatus status) {
User newUser = new User(user.getName() + "-changed");
status = new UserStatus("SUCCESS"); // Won't work as expected because Java is pass by value
//status.setStatus("SUCCESS"); // Uncomment this and see that it's the only way to change the status flag
return user;
}
public UserStatus() { this.status = "UNKNOWN"; }
public UserStatus(String value) { this.status = value; }
public String getStatus() { return this.status; }
public void setStatus(String status) { this.status = status; }
public String toString() { return this.status; }
}
class User {
private final String name;
public User(String name) { this.name = name; }
public String getName() { return this.name; }
public String toString() { return this.name; }
}