powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / null и пустая строка
25 сообщений из 33, страница 1 из 2
null и пустая строка
    #38294347
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задумался об аналогиях. В некоторых DBMS на уровне типов
данных не различается состояние пустой строки и строки равной NULL.
На уровне операций. Т.е. конкатенации и поиски строк и прочие
операции ведут себя идентично. А в Java коде мы ставим много
проверок на аргумент == null. Задумался о враппере для
строк где эта особенность учитывается.
...
Рейтинг: 0 / 0
null и пустая строка
    #38294386
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно, конечно, посткомпиляцией обернуть все небезопасные обращения к переменным типа String.
Но NPE на строках, по-моему не такая уже большая проблема.
...
Рейтинг: 0 / 0
null и пустая строка
    #38294392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczобернуть все небезопасные обращения к переменным типа String.

Вот это реально проблема. Лопатить весь код. Мне кажется лучше
создать новый тип данных. Что-то вроде SafeString или NullableString.
Не наследник. Не контейнер а просто вообще новый тип. И заимплементить
потихоньку эту Varchar-like логику.
...
Рейтинг: 0 / 0
null и пустая строка
    #38294398
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не секрет, в каких именно dbms?
...
Рейтинг: 0 / 0
null и пустая строка
    #38294402
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот это реально проблема. Лопатить весь код.

про "посткомпиляцию" ты зачем-то ловко из моего коментария выкинул. Конечно же не руками делать.
...
Рейтинг: 0 / 0
null и пустая строка
    #38294412
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraЕсли не секрет, в каких именно dbms?
В Oracle.
...
Рейтинг: 0 / 0
null и пустая строка
    #38294438
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗадумался о враппере для строк где эта особенность учитывается. Враппер - избыточно. Здесь достаточно одной функции, например: StringUtils.defaultString .
...
Рейтинг: 0 / 0
null и пустая строка
    #38294443
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonivanraЕсли не секрет, в каких именно dbms?В Oracle.
конкатенация - да, а про поиски строк неверное утверждение, я поэтому и спросил. Ни разу не встречал чтобы выдавался один и тот же результат на условия
Код: sql
1.
2.
where somestring=''
where somestring is null


Насчет явы - а почему бы не использовать StringBuilder? Там конструктор с null и пустой строкой дают одинаковое содержимое
...
Рейтинг: 0 / 0
null и пустая строка
    #38294459
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonне различается состояние пустой строки и строки равной NULL Формально они идентичны. Иногда это используется на практике: Validating Null and Empty Strings
...
Рейтинг: 0 / 0
null и пустая строка
    #38294465
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczmaytonВот это реально проблема. Лопатить весь код.

про "посткомпиляцию" ты зачем-то ловко из моего коментария выкинул. Конечно же не руками делать.
Извини. Что-то в это время я торможу как слоупок. Да и не спец я в посткомпилляциях.
Может кинешь ссылку на юзкейс?
...
Рейтинг: 0 / 0
null и пустая строка
    #38294594
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ некоторых DBMS на уровне типов
данных не различается состояние пустой строки и строки равной NULL.
На уровне операций. Т.е. конкатенации и поиски строк и прочие
операции ведут себя идентичночто гармонично уравновешивается троичной логикой и необходимостью отдельно обрабатывать "null" и "все остальные данные".

P.S. А разве простое someConstant.equals(someVar) не закрывает значимую/существенную часть NPE-причин в случае строк?
...
Рейтинг: 0 / 0
null и пустая строка
    #38294907
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanИногда это используется на практике: Validating Null and Empty Strings

Красивый код из примера по ссылке:
Код: java
1.
2.
3.
4.
5.
if (testString.equals(null)) {
  doSomething();
} else  {
  doAnotherThing();
}
...
Рейтинг: 0 / 0
null и пустая строка
    #38294912
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J.SergeКрасивый код из примера по ссылке:
Код: java
1.
2.
3.
4.
5.
if (testString.equals(null)) {
  doSomething();
} else  {
  doAnotherThing();
}


Даа... фак мой мозг от JSF.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295034
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, меня умиляет описание этого кода:
авторBy default, the doAnotherThing method is called even when the user enters no data, because the testString element has been initialized with the value of an empty string.

Можно подумать, если testString проинициализировать null'ом, то вызовется doSomething...
...
Рейтинг: 0 / 0
null и пустая строка
    #38295063
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я полез в дебри. В нашем продакшен коде очень много паттернов типа

Код: java
1.
2.
3.
if (someObject!=null) && (someObject.subObject!=null) && (someObject.subObject.Property.equals(someFuckenValue) && .... ){
    .....
}



И строки это просто частный случай. Много операций использующих логику проверок и сравнения с null.

Кружусь в медленном вальсе. Медитирую. Пью кофе и грызу конфетки.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295089
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StringUtils на все случаи жизни. Либо defaultString для сравнений, либо isBlank/isNotBlank для условий. зачем усложнять?
Готовый код не надо перелопачивать, просто далее используй только новый, и корректируй старый по мере попадания на глаза.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295096
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
2.
3.
if (someObject!=null) && (someObject.subObject!=null) && (someObject.subObject.Property.equals(someFuckenValue) && .... ){
    .....
}



Инкапсуляция ни к черту. Это и есть та самая Anemic Model на которую так плюётся Фаулер. Почему всё это не находится внутри объектов someObject и subObject? Почему текущему классы приходится обращаться к Property ещё через две ссылки?
Некий внешний класс проводит манипуляции\проверки состояния каких-то объектов, вместо того чтобы делигировать им эту логику.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295106
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
так работает мозг, сначала проверка someObject!=null, потом вспоминает что еще можно проверить, и руки сами дописывают остальное
...
Рейтинг: 0 / 0
null и пустая строка
    #38295111
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerBlazkowicz,
так работает мозг, сначала проверка someObject!=null, потом вспоминает что еще можно проверить, и руки сами дописывают остальное
Я бы не называл это "работает мозг". Это называется что вижу, то пою. NPE? Та, пофиг. Не будем фиксить первопричину. Просто добавим проверку на null.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295113
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ полез в дебри. В нашем продакшен коде очень много паттернов типа

Код: java
1.
2.
3.
if (someObject!=null) && (someObject.subObject!=null) && (someObject.subObject.Property.equals(someFuckenValue) && .... ){
    .....
}



И строки это просто частный случай. Много операций использующих логику проверок и сравнения с null.

Кружусь в медленном вальсе. Медитирую. Пью кофе и грызу конфетки.
Поэтому я написал выше что строки это очень частный случай. Проблемы null значений он не решит.
Я стараюсь минимизировать проверки на null и, если возникает NPE, фиксить его в одном месте там где появляется null значение. А не во всех местах куда оно распространяется в итоге.
А так, рекомендации стандартные
NullObject pattern
@NotNull (Oval, IntelliJ IDEA и многие другие)
Языки с интегрированым NotNull, например Kotlin.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295114
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗадумался об аналогиях. В некоторых DBMS на уровне типов
данных не различается состояние пустой строки и строки равной NULL.
На уровне операций. Т.е. конкатенации и поиски строк и прочие
операции ведут себя идентично. А в Java коде мы ставим много
проверок на аргумент == null. Задумался о враппере для
строк где эта особенность учитывается.

Зачем? В java на клиенте во-первых, совсем другие правила для работы с NULL, чем в базе данных, во-вторых java null - это совсем другой null, нежели NULL в базе данных и SQL. Они никак не связаны друг с другом.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295124
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczИнкапсуляция ни к черту. Это и есть та самая Anemic Model на которую так плюётся Фаулер. Почему всё это не находится внутри объектов someObject и subObject? Почему текущему классы приходится обращаться к Property ещё через две ссылки?
Некий внешний класс проводит манипуляции\проверки состояния каких-то объектов, вместо того чтобы делигировать им эту логику.
Я унаследовал этот код от предшественников. И задача вобщем-то не стоит как "Почему-бы не".
Просто нет времени и возможности рефакторить фундамент. А начать сначала
с каких-то разумных упрощений по мере возможности - это да.

А появление null-аргументов String растёт корнями из ORM, DAO и прочих слоёв которые
сопрягаются с БД. Что поделаешь. NULL для БД - это нормально.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295137
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ унаследовал этот код от предшественников. И задача вобщем-то не стоит как "Почему-бы не".

А как тогда задача стоит?

maytonПросто нет времени и возможности рефакторить фундамент. А начать сначала
с каких-то разумных упрощений по мере возможности - это да.

Не нужно рефакторить. Выкидываем проверку на null, где она не нужна. Добавляем NotNull для выявления источника null значения.
Исправляем на NullObject либо выкидываем Exception\делаем валидацию на месте появляения null, а не на месте использования.

maytonА появление null-аргументов String растёт корнями из ORM, DAO и прочих слоёв которые
сопрягаются с БД. Что поделаешь. NULL для БД - это нормально.
Нет, это не нормально. Во-первых NULL поля в базе тоже стоит свести к минимуму и оставить только там где они действительно нужны.
Во-вторых проверки на null значения свойств сущностей зачастую легко инкапсулируются в самих сущностях, и тогда весь остальной код можно от них избавить. Без конкретного примера понять не просто. Покажи реальный похожий код из системы и объясни источник null значений. Тогда можно обсудить как выкинуть лишние проверки.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНе нужно рефакторить. Выкидываем проверку на null, где она не нужна. Добавляем NotNull для выявления источника null значения.
Исправляем на NullObject либо выкидываем Exception\делаем валидацию на месте появляения null, а не на месте использования.
Я место появления знаю. 99% это объекты DAO. Переходники MyBatis.
...
Рейтинг: 0 / 0
null и пустая строка
    #38295171
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ место появления знаю. 99% это объекты DAO. Переходники MyBatis.
Замечательно. Тогда просто нужно отказываться от абсолютно анемичных сущностей и выносить эти провери туда. Код станет намного проще.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / null и пустая строка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]