Vous ne pouvez pas modifier la référence UserStatus entrante, car Java est transmis par valeur, mais vous pouvez modifier son état s'il est modifiable.
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; }
}
Selon mes connaissances - NON. – Bhushan
duplication possible de [Comment implémenter int in/out params dans java] (http://stackoverflow.com/questions/8355404/how-to-implement-int-in-out-params-in-java) et [Comment pour créer des paramètres IN OUT ou OUT en Java] (http://stackoverflow.com/questions/4455693/how-to-create-in-out-or-out-parameters-in-java) –
et si vous vous demandez * pourquoi *, voir [Pourquoi Java n'utilise-t-il pas le paramètre out dans sa syntaxe de langage alors que C# fait?] (http://stackoverflow.com/questions/1044452/why-does-java-not-use-the-out- paramètre-dans-sa-langue-syntaxe-while-c-sharp-doe) –