Метод, написанный странным образом, верно ли мое предложение? - PullRequest
0 голосов
/ 19 октября 2011

У меня есть метод - чужая программа, но я бы лучше написал его более читабельным способом. Мне просто нужно проверить, верно ли мое предложение.

Текущий текст записан как:

if (userData instanceof String && ((String) userData).compareTo(name) == 0)

Может быть:

if(.... && userData.equals(name))

Спасибо

Ответы [ 4 ]

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

Да.compareTo возвращает 0, когда equals возвращает true.


Из API Comparable.compareTo:

Возвращает:

... отрицательное целое число, ноль или положительное целое число, так как этот объект меньше, чем равно или больше указанного объекта....

Из документации String.compareTo API:

Возвращает:

значение 0, если аргумент является строкой, лексикографически равной этой строке ...

1 голос
/ 19 октября 2011

Вы могли бы даже упростить это дальше.Если вы уверены, что name является строкой, вы можете уменьшить все это до:

name.equals(userData)

Однако вам придется проверять нулевое значение на name.В исходном коде проверка недействительности выполнялась из-за выражения instanceof для userData.

name != null && name.equals(userData)

String.equals() уже проверяет instanceof String.

public boolean equals(Object anObject) {
if (this == anObject) {
    return true;
}
if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = count;
    if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
        return false;
    }
    return true;
    }
}
return false;
}
1 голос
/ 19 октября 2011

Возьмите прямо из документа Java:

Результат равен нулю, если строки равны; CompareTo возвращает 0 именно тогда, когда метод equals (Object) возвращает true.

0 голосов
/ 19 октября 2011

Да.Затем instanceof эффективно защищает только от нулевых значений userData.Если вы знаете, что одно или другое не равно нулю, вы можете упростить это до:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...