2

私はCの世界から来ました。そこで、「定義」を使用して、さまざまな戻り値、つまりC関数から返される値を次のように定義しました。

#define RETURN_SUCCESS 0
#define RETURN_ERROR -1

int myFunc()
{
    if(...) return(RETURN_SUCCESS);
    else if(...) return(RETURN_ERROR);            
}

これはJavaでどのように正しい方法で行われますか?

私が持っているとしましょう:

public MyObject findMyObject()
{
     MyObject tempObject = search();

     if( tempObject.type == myType ) 
     { 
        return tempObject;
     }
     else
     {
        return null; 
     }
}

戻っても大丈夫nullですか?

それを行うためのより適切な方法はありますか?

4

3 に答える 3

5

nullを返すのは問題ありません。Java APIで、時々nullを返す か、Intが期待される場合は-1を返すことに気付くでしょう。よく使用されるもう1つのオプションは、問題が発生した場合に単に例外をスローすることです。

ほとんどの人とおそらく今あなた自身に尋ねている質問は、「では、いつ例外をスローし、いつnullを返すのですか?」です。その質問はここでかなりよく答えられます。

于 2012-04-25T13:46:10.710 に答える
4

リターンコードを使用してJavaのエラーを示すことは、アンチパターンです。代わりに例外を使用する必要があります。

エラーがプログラミングエラー(無効なパラメーター、誤った状態)が原因である場合は、チェックされていない例外のインスタンスをスローします。

環境で問題が発生したためにエラーが発生した場合(サーバーに接続できない、必要なファイルが見つからない)、チェックされた例外をスローします。

于 2012-04-25T13:47:04.003 に答える
1

定義した仕様を尊重するものを返すことは常にOKです。したがって、ドキュメント(javadocおよびtests)で、nullが返される可能性のある状況を定義すると、それ以上の手間をかけずにnullを返すことができます。

また、エラーコード(Cコードなど)を人質にすることは、Javaでの最善の戦術ではないことも理解する必要があります。アンチパターンだと考える人さえいるかもしれません。例外を使用するのがより一般的です。Javaを初めて使用する場合は、 http://docs.oracle.com/javase/tutorial/essential/exceptions/にあるチュートリアルを読んで詳細を確認することを検討してください。

于 2012-04-25T13:50:43.313 に答える