0

明らかに、ここには基本的なものが欠けています。さまざまな if ステートメントの関数全体に return ステートメントがある関数があります。その利点については明らかに議論の余地がありますが、私はよく知らない状況に直面しています。

ブレークポイントまでプログラムの実行を追跡したところ、通常どおり return ステートメントに進むことに気付きました。ただし、そのステートメントに到達した後、関数の残りをスキップし、関数の下部にある return ステートメントに移動して、そこに座っている値を返します。コード スニペットは次のとおりです。数百行の長さなので、すべてを投稿するのではなく、トレースした部分だけを投稿します。

public Location getBestLocation(Context c){ //the header

else if(gps_enabled && passive_enabled && !network_enabled){
        if(hGPSLast != null && hPassive != null){
            if(hGPSLast.getTime() > hPassive.getTime() && System.currentTimeMillis() - hGPSLast.getTime() < 300000){
                return hGPSLast; 
            }else if(hPassive.getTime() > hGPSLast.getTime() && System.currentTimeMillis() - hPassive.getTime() < 300000){
                return hPassive; 
            }else{
                hGPSBest = getGPSloc(c);
                if(hGPSBest.getTime() == hGPSLast.getTime()){
                    if(hPassive.getTime() > hGPSLast.getTime()){
                        return hPassive; 
                    }else{
                        return hGPSLast; 
                    }
                }else{
                    return hGPSBest; 
                }
            }
        }else if(hGPSLast != null && hPassive == null){
            if(System.currentTimeMillis() - hGPSLast.getTime() <300000){
                return hGPSLast; 
            }else{
                hGPSBest = getGPSloc(c);
                return hGPSBest; 
            }
        }else if(hPassive != null && hGPSLast == null){
            if(System.currentTimeMillis() - hPassive.getTime() < 300000){
                return hPassive; 
            }else{
                hGPSBest = getGPSloc(c);
                if(hGPSBest != null){
                    return hGPSBest;
                }else{
                    return hPassive; 
                }
            }
        }

体のその部分の戻り値の 1 つに到達しますが、コードは私がこれを持っている一番下までスキップします:

    Criteria criteria = new Criteria();
    String best = lm.getBestProvider(criteria, true);
    //since you are using true as the second parameter, you will only get the best of providers which are enabled.
    def = lm.getLastKnownLocation(best);
    return def;

コードは、空白ホルダー Location オブジェクトとして定義した「def」を返します。何らかの理由で本文の戻り値に到達しなかった場合、そのすぐ上のコードで埋められることを望んでいました。ここで何が欠けていますか?

4

1 に答える 1

4

コマンドは、残りのreturnすべてのメソッド コードをただちに無視し、現在のメソッドを終了します。メソッド自体が呼び出された前の関数にすぐに戻ります。

例えば:

if(hPassive.getTime() > hGPSLast.getTime()){
    return hPassive; 
}else{
    return hGPSLast; 
}

として書き換えることができます

if(hPassive.getTime() > hGPSLast.getTime()){
    return hPassive; 
}

return hGPSLast;

メソッドは常に 2 つのいずれかを返し、残りのコードをスキップします。

于 2013-08-04T21:27:48.350 に答える