Sie können nicht tun, was Sie direkt wollen, weil, wie Pillar erklärt, Java Variablen nach Wert, nicht durch Verweis übergibt. Daher wird eine Änderung des Methodenparameters niemals an den Aufrufer zurückgegeben.
Ein Verweis auf eine Instanz einer Klasse wird ebenfalls als Wert übergeben, aber der Verweis verweist immer noch auf die gleiche Instanz wie der vom Aufrufer angezeigte. Daher ist es eine gute Lösung, Ihr Ausführungsflag in einer Klasse zu kapseln und zu betreiben auf einer Instanz davon. Auf diese Weise können Sie den Wert innerhalb der Instanz ändern.
In Ihrem Fall stellt Ihr Flag eine Berechtigung dar, daher ist es sinnvoll, eine Klasse Permission
zu erstellen.
Ich habe den Rest des Codes gleich gelassen, aber abhängig von der Gesamtarchitektur Ihrer Anwendung, macht es wahrscheinlich Sinn, die set_Execute
Methode auch in die Permission
Klasse zu machen.
public class Permission {
private boolean allowed;
public void setAllowed(boolean allowed) {
this.allowed = allowed;
}
// Add getAllowed and toString methods
}
public Permission canExecute(){
Permission execute = new Permission();
set_Execute(execute);
log("can execute"+execute); //it is going inside method set_Execute but it is always printing execute as false
return execute;
}
private void set_Execute(Permission setExecute){
setExecute.setAllowed(true);
}
@ ritesht93 Das macht absolut keinen Unterschied. 'Boolean' ist unveränderlich. – Radiodef
Nein, ich ging durch diesen Beitrag, bekam aber keine präzise Antwort und es spricht auch über Referenz oder Value.mine ist anders – divya
Es ist nicht. Es ist genau dasselbe. – Savior