2016-04-15 13 views
0

ブール値の実行をメソッドset_Executeに渡してtrueに設定したいと思います。ここでメソッド内で変数を呼び出すことで値を設定することができません

はコードです:Javaで

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これは全く違いはありません。 'ブール'は不変です。 – Radiodef

+0

いいえ、私はそのポストを通過しましたが、正確な応答を得ていないし、参照や値渡しのabtも話しています。違いは – divya

+1

です。それはまったく同じです。 – Savior

答えて

0

ブール彼らは設定できませんので、不変ラッパーです。メソッド内から内部値を編集できるようにするには、AtomicBooleanを使用します。

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

不変性と変数の割り当てを混同しないようにしてください。それらの例は何かが不変なので失敗しません。 – Savior

0

Pillarは説明したように、Javaは変数を参照渡しで値渡しするため、直接行うことはできません。したがって、メソッドパラメータの変更は、呼び出し元に返されることはありません。

クラスのインスタンスへの参照もvalueによって渡されますが、参照は呼び出し元と同じインスタンスを指しています。そのため、実行フラグをクラスにカプセル化して操作することをお勧めしますそれのインスタンス上に。 このようにして、インスタンス内の値を変更できます。

あなたのフラグは許可を表しているので、クラスPermissionを作成することは意味があります。

残りのコードは同じですが、アプリケーション全体のアーキテクチャによってはPermissionクラスにも同様にset_Executeメソッドを作成するのが適切でしょう。

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

あなたは以下のように実行するための値をバックに設定する必要があります。

execute = set_Execute(execute); 
関連する問題