2011-08-05 6 views
1

私は、これは非常に単純な質問、PHPでこれを行うにアンドロイド相当するものであることを望む:AndroidのプログラミングのNULL値の論理:混乱

PHP:

機能BlahBlah($ first_var、$ second_var、$ optional_var_1 = nullを、$ optional_var_2 = NULL){

}

アンドロイドで、私が関数に送り、すべてがすべての変数に対してnull以外の値を持っている必要があります表示されます。 if文のような論理を追加してヌル値をチェックすることはできますが、なぜヌル値を渡して無視することができないのですか?

私の問題は、自分のアプリケーションのSQLデータベースに本を入れる機能を中心に展開されています。著者、タイトル、著作権、ISBNなどの書籍の情報をすべて入力すると、null値を入力していないので問題はありません。しかし、もし私が著作権やISBNをNullとして残し、これらを関数に渡そうとすると、私はnullpointerexceptionを取得します。 ISBNや著作権(これは実例ではなく実例ではない)を記録する必要はないので、addBook(...)addBookWithNoISBN(...)addBookWithNoCopyright(...)などの複数の関数を作成する代わりに、 ...これを行うためのより良い方法は何ですか?

私はすべての変数を文字列配列として関数に送り、関数自体で何らかの処理を行うべきだと思いますか?より良い方法がありますか?

私は、人々が私が言っていることを得ることを望む、ありがとう!

+0

おそらく、nullではなく空の文字列を使用したいと思っていますか? – Earl

答えて

1

のJavaを使用すると、まったく同じ名前を持つ複数のメソッドを定義することができますメソッドのオーバーロードと呼ばれるものを、サポートしていますが、異なる数/パラメータの種類と:http://download.oracle.com/javase/tutorial/java/javaOO/methods.html

ですから、それぞれの可能な組み合わせのために別々の符号化方式に終わるだろう。あなたが同じよう2、3、または4つの変数を渡した場合は関係ありません、これにより

boolean test(int param1, String param2) { 
    return test(param1, param2, null, null); 
} 
boolean test(int param1, String param2, String param3) { 
    return test(param1, param2, param3, null); 
} 
boolean test(int param1, String param2) { 
    // Do your logic here 
    if(param1 == 'foo' && param3 == null) 
     return false; 
    if(param2 == param3) 
     return true; 
} 

:彼らは、その後、必要に応じてnull値を渡すと、コアロジックを行うメインメソッドを呼び出します関数は最終的にあなたが渡さなかったもののための 'ヌル'値で呼び出されます。

boolean AddBook(int isbn) 
{ 
    Book result = FindBookByISBN(isbn); 
    return AddBook(result); 
} 
boolean AddBook(String asin) 
{ 
    Book result = FindBookByAmazonId(asin); 
    return AddBook(result); 
} 
boolean AddBook(String title, String author) 
{ 
    Book result = FindBookByTitleAndAuthor(title, author); 
    return AddBook(result); 
} 
boolean AddBook(Book theBook) 
{ 
    if(theBook == null) 
     return false; 

    return MyBookCollection.Add(theBook); 
} 

希望に役立ちます:

は、ここでは、入力タイプのすべての種類を受け入れることができ、単一のメソッド名を持つ別の例を、です!

+0

ありがとう、これは私が取ると思うルートのようです。私はメソッド内のロジックステートメントを制限したいと思います。私はこの "再帰的な"アプローチがそれを行う方法だと考えています。私は最初の例を完全には理解していないことを認めなければなりませんが、私はあなたのソースから間違いなく読んでいます。 – AutoM8R

+1

長い読書ではなく、別のプログラミング言語から来ている人をお勧めします。 – AutoM8R

1

アンドロイドでは、関数のパラメータをデフォルト値に設定することはできません。関数にデフォルト値を渡すか、関数内でパラメータがnullであるかどうかをチェックする必要があります。

 function void test(int param1, String param2, String param3,..) { 
       if(param2 == null) param2 = param2_Default_value; 
     } 

希望です。

+0

ありがとう、私は右の球場で少なくとも考えていたと思います! – AutoM8R

1

この関数では、nullでないことが必要な処理をしない限り、またはif(variable!= null)でヌルかどうかを最初に確認しても問題ありません。

+0

ヌルが存在する可能性のあるデータベース列からXML文書を構築するときは、次のようなものを使用します。\t \t \t \t \t serializer.text(colvalue == null? "":colvalue); – Earl

+0

ありがとう、私は関数内で何かをしているに違いない(これらはJavaでより正確にメソッドと呼ばれていると思います)、この値がnull以外である必要があります。 – AutoM8R