-4

私はJAVAにまったく慣れていません。一部の関数をBasicのような言語で使用できるようにするために、JAVAでラッパーライブラリを作成しています。

コンパイラーが(Eclipseを使用して)文句を言わなかったにもかかわらず、JAVAライブラリーで一部のコードが実行されなかったことに気付いたとき、ある時点で在庫がありました。次のようにコードを置き換えることで、最終的に解決しました。

public void VideoQuality(int vQuality) //did not work 

の中へ

public boolean VideoQuality(int vQuality) //works

完全なコードスニペットは次のとおりです。

 public void VideoQuality(int vQuality) //did not work
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
         }  

public boolean VideoQuality(int vQuality) //works
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
        return true;
          }  

voidはVisualBasicのsubに対応し、 booleanは関数に対応すると思います。

しかし、次のコードがvoidを使用して機能するのは奇妙だと思いました

public void setVolume(float leftVolume,float rightVolume)
      {
          vitamioExt.setVolume(leftVolume, rightVolume);
      }

私は確かに非常に明白な何かを見逃していますが、ブールコードが機能しているのにvoidコードが機能しない理由がわかりません。

多分それは私がコードをどのように呼ぶかに依存しますか?

いくつかの光を当てることができる人はいますか?

編集:何が機能していなかったかを明確にするために、私はコードを意味しました:

vitamioExt.setVideoQuality(vidQuality);

void-snippetで実行されませんでした。

EDIT2:vidQualityはコードの別の部分で宣言されました。問題はそれらにあり、変数はすべて機能していたので、スニペットを投稿しました。

EDIT3:最後に、コンパイラーがコンパイルしなかったにもかかわらず、void-snippetを誤って呼び出したに違いないと思います。どちらの場合も、両方のスニペットを実行する必要がありますが、戻り値を期待していなかったため、もちろんvoidスニペットを使用するのが適切です。

4

2 に答える 2

10

間の唯一の違い

public void VideoQuality(int vQuality)

public boolean VideoQuality(int vQuality)

前者は値を返さず、後者は(具体的にはboolean値)を返すということです。それが違いの全範囲です。

これは、たとえば、次のvoidバージョンの場合を意味しVideoQualityます。

boolean x = VideoQuality(10); // Will not compile
VideoQuality(10);             // Will compile

void...関数の結果を変数に割り当てることができないためです。

boolean次のバージョンを使用した場合VideoQuality

boolean x = VideoQuality(10); // Will compile
VideoQuality(10);             // Will compile

...変数に戻る関数の結果を割り当てることはできますが、そうする必要はありませ。必要に応じて、戻り値を無視できます。(通常、これは良い習慣ではありませんが、大丈夫な場合もあります。)booleanboolean

voidはVisualBasicのsubに対応し、booleanは関数に対応すると思います。

大まかに言えば、はい。VBvoidのように、関数に戻り値がないことを示します。Subその他(boolean、、、、など)はintFooA)関数に戻り値があり、B)指定されたタイプであることを示します。つまりFunction、VBの場合と同じです。

于 2012-07-06T22:16:53.327 に答える
1

関数は通常の変数と同じように型で宣言されますが、関数の宣言された型はその戻り型と呼ばれ、 「この関数は呼び出されるとブール値として返されます」と言います。例えば:

boolean alive = true;
boolean isDogAlive() {
    return alive;
}

この関数が呼び出されると、trueが返されるため、次のように言うことができます。

if (! isDogAlive()) { // if it returns false
    System.out.println("Oh no!");
} else {
    System.out.println("Yay!");
}

関数が何も返さない場合、関数は無効と宣言されます。実際にtrue/false値を取得する必要がない限り、メソッドにブール値の戻り型を指定する必要はありません。Voidは、状況に応じて正常に機能するはずです。

于 2012-07-06T22:25:39.430 に答える