2016-04-15 9 views
0

Ich möchte eine boolesche Ausführung als wahr setzen, indem Sie es in eine Methode set_Execute.Kann jemand Hilfe bei der Lösung dieses Problems?Nicht in der Lage, Wert auf eine Variable durch Aufrufen innerhalb einer Methode

Hier Code:

public boolean canExecute(){ 
    boolean execute=false; 
    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 boolean set_Execute(boolean setExecute){ 
    return setExecute=true; 
    } 
+1

@ ritesht93 Das macht absolut keinen Unterschied. 'Boolean' ist unveränderlich. – Radiodef

+0

Nein, ich ging durch diesen Beitrag, bekam aber keine präzise Antwort und es spricht auch über Referenz oder Value.mine ist anders – divya

+1

Es ist nicht. Es ist genau dasselbe. – Savior

Antwort

0

Boolesche Werte in Java sind unveränderlich Wrapper, so dass sie nicht eingestellt werden kann. Sie können AtomicBoolean verwenden, wenn Sie den inneren Wert innerhalb einer Methode bearbeiten möchten.

public boolean canExecute(){ 
    AtomicBoolean execute = new AtomicBoolean(false); 
    set_Execute(execute); 
    log("can execute" + execute.get()); 
    return execute.get(); 
} 

private void set_Execute(AtomicBoolean setExecute) { 
    setExecute.set(true); 
} 
+1

Bitte verwechseln Sie die Unveränderlichkeit und Variablenzuordnung nicht. Ihr Beispiel versagt nicht, weil alles unveränderlich ist. – Savior

0

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); 
} 
1

Sie den Wert zurück sollte wie unten auszuführen.

execute = set_Execute(execute);