Логика нулевых значений в программировании на Android: запутано - PullRequest
1 голос
/ 05 августа 2011

Надеюсь, это очень простой вопрос, что такое Android, эквивалентный этому в PHP:

PHP:

функция BlahBlah ($ first_var, $ second_var, $ option_var_1 = null, $ option_var_2 = null) {

}

В Android кажется, что все, что я передаю в функцию, должно иметь ненулевое значение для всех переменных.Хотя я могу добавить логику, например операторы if, для проверки на нулевые значения, почему я не могу просто пройти через нулевые значения и игнорировать их?

Моя проблема вращается вокруг функции, которая вводит книгу в мою базу данных sql для моего приложения.Если я введу всю информацию о книге, такую ​​как автор, название, авторское право, ISBN и т. Д., То не возникнет никаких проблем, поскольку я не предоставляю нулевые значения.Однако, если бы я оставил авторское право или ISBN как Null и попытался передать их функции, я получил nullpointerexception.Иногда мне не нужно записывать ISBN или авторские права (это пример, а не настоящее приложение), поэтому вместо создания нескольких функций, таких как addBook (...) addBookWithNoISBN (...) addBookWithNoCopyright (...)... какой лучший способ сделать это?

Я полагаю, что я должен отправить все свои переменные в функцию в виде строкового массива и, возможно, выполнить некоторую обработку в самой функции?Есть ли способ лучше?

Надеюсь, люди поймут, что я пытаюсь сказать, большое спасибо!

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Пока в функции вы не делаете что-либо, требующее, чтобы оно было не нулевым, или проверяли, имеет ли оно значение null с помощью if (variable! = Null), у него не должно быть проблем с передачей нулевого значения.

1 голос
/ 06 августа 2011

Java поддерживает так называемую перегрузку методов, которая позволяет вам определять несколько методов, имеющих одно и то же точное имя, но с разными числами / типами параметров: http://download.oracle.com/javase/tutorial/java/javaOO/methods.html

Таким образом, в конечном итоге вы закодируете отдельный метод длякаждая возможная комбинация.Затем они при необходимости передадут нулевые значения и вызовут метод main, который выполняет основную логику:

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;
}

При этом не имеет значения, если вы передадите 2, 3 или 4 переменные какта же самая функция в конечном счете вызывается с «нулевыми» значениями для вещей, которые вы не передали.

Вот еще один пример, где у вас есть одно имя метода, которое может принимать все виды входных типов:

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);
}

Надеюсь, это поможет!

1 голос
/ 05 августа 2011

В Android вы не можете установить параметры функции в значение по умолчанию.Вы должны передать значение по умолчанию в функцию или null и проверить, является ли параметр нулевым в функции.

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

Надеюсь, это объясняет это.

...