Как проверить, установлена ​​ли переменная? - PullRequest
30 голосов
/ 09 октября 2011

В PHP есть функция isset.А как насчет Java?Я думаю, что могу использовать == null с объектами, но как насчет типов значений, таких как int

Ответы [ 9 ]

28 голосов
/ 09 октября 2011

Компилятор Java не позволит вам определять переменные и использовать их до того, как им будет присвоено значение, поэтому проблема не существует в той же форме, как в php.

EDIT

Если в вашем случае компилятор не остановил вас (потому что это, например, переменная экземпляра), лучшее решение, вероятно, состоит в том, чтобы инициализировать переменную к какому-то «специальному» значению, как предложено в Guest11239193.Например:

int x = 0; // because by convention 0 is a reasonable default here

Конечно, какое «безопасное, разумное» значение инициализации зависит от приложения.

Впоследствии вы можете

if (x == 0) { // only allow setting if x has its initial value
    x = somenewvalue;
}

ИлиВы можете получить доступ к x через установщик, который запрещает изменение более одного раза (вероятно, в большинстве случаев это перебор):

private int x;
private boolean x_was_touched = false;

public void setX (int newXvalue) {
    if (!x_was_touched) {
       x = newXvalue;
       x_was_touched = true;
    }
}

public int getX() {
    return x;
}

Вы также можете использовать Integer, брат объекта int, который может быть инициализирован как null

Integer x = null; 

Однако тот факт, что вы думаете, что вам нужны эти знания, может скрыть более глубокий логический недостаток в вашей программе, поэтому я бы посоветовал вам изучить причину, по которой вы хотите знать, является ли примитивное значение (примитив какв отличие от объектов, int против Integer) не был затронут.

11 голосов
/ 09 октября 2011

В Java не существует несуществующей переменной.

5 голосов
/ 09 октября 2011

В Java это ошибка компилятора при использовании переменной без установки.

Переменные класса и экземпляра инициализируются значением, которое считается значением по умолчанию «null», в зависимости от типа данных.

Так что isset подобная функция не имеет смысла.

3 голосов
/ 09 октября 2011

Вы не можете проверить, установлена ​​ли переменная.Вы можете:

  1. Инициализировать переменную, которая имеет смысл в качестве начального значения - например, 0 для счетчика, максимальное целочисленное значение, если вы рассчитываете минимум, и т. Д.
  2. Инициализируйте переменную значением, которое вы не собираетесь использовать, например -1, если собираетесь использовать целочисленные значения без знака и пустую строку для строки.
  3. Введите логический флагэто показывает, начали ли вы что-то делать.
1 голос
/ 09 октября 2011

По умолчанию для int будет 0, а для string будет "".

0 голосов
/ 09 мая 2019

Целочисленная переменная, объявленная в Java, не может проходить условие для "undefined" или "null". Но с помощью wrapper class мы можем использовать его, т.е.: Integer a = null;

public class Solution {
    public static void main(String[] args) {
        Integer max = null; //works perfectly
        int max1 == null; //throws and incompatible error 
        if (max == null)
            System.out.println("null");
    }
}
0 голосов
/ 23 февраля 2019

Наиболее распространенный вариант использования неопределенного значения - получение информации из источника данных. В любом конкретном запросе SQL у вас могут быть записи с целыми числами, значения которых равны 0, но которые также могут быть пустыми / пустыми полями. То же самое касается строк, где пустая строка '' не совпадает с неопределенной или пустой строкой.

Похоже, что использование эталонных версий объектов для нативных типов - единственное решение, которое вызывает сожаление, так как оно грязное. Альтернативой может быть сохранение логического значения для каждого отдельного поля данных, которое необходимо проверять и поддерживать вручную, что еще хуже.

0 голосов
/ 04 февраля 2016

Создайте свои функции для этого элемента управления, потому что у каждого объекта есть свои правила о "isset () result";

Примеры:

    public static final boolean isEmpty(String x) {
        return (x == null || x.trim().equals(""));
    }
    public static final boolean isEmpty(Integer x) {
        return (x == null || x == 0);
    }
    public static final boolean isEmpty(Long x) {
        return (x == null || x == 0);
    }
    public static final boolean isEmpty(Collection<?> x) {
        return (x == null || x.size() == 0);
    }
    public static final boolean isEmpty(Map<?,?> x) {
        return (x == null || x.size() == 0);
    }
    public static final boolean isEmpty(Object[] x) {
        return (x == null || x.length == 0);
    }
0 голосов
/ 10 октября 2011

Вы можете попытаться использовать объект вместо примитивного значения, например


Integer x = null;
...
public Integer getX(){
   if(x == null) {
      x = new Integer(10);
   }
   return x;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...