#java #serialization #boolean
#java #сериализация #логическое
Вопрос:
Я не могу найти в Boolean
классе какой-либо метод для сериализации логического значения в «1» и «0» вместо «true» и «false».
Есть ли какая-либо встроенная функция для этого? Если нет, то каков наилучший способ (наиболее оптимизированный способ)?
Обновление: Я действительно имею в виду создать String
из Boolean
.
Комментарии:
1. Какой метод сериализовал a
Boolean
в «true» и «false»? Или вы просто говорите о создании aString
из aBoolean
?2. Пусть
b
— логическое значение:int i = b ? 1 : 0;
.3. @Matthieu, у вас есть более 10 вопросов, на которые вы не ответили. 😉
4. @Kevin: осторожно! Он говорит о примерно
Boolean
, и в этом случаеb
могло бы бытьnull
!5. @Kevin ты имеешь в виду
int i == b ? 1 : 0;
?
Ответ №1:
Если вы говорите о создании String
из заданного Boolean
, то нет, нет встроенного метода, который выдает «0» или «1», но вы можете легко написать его:
public static String toNumeralString(final Boolean input) {
if (input == null) {
return "null";
} else {
return input.booleanValue() ? "1" : "0";
}
}
В зависимости от вашего варианта использования, возможно, было бы более уместно разрешить ему выдавать значение NullPointerException
if input
равно null. Если для вас это так, то вы можете сократить метод только до второй return
строки.
Комментарии:
1. кажется, вы пропустили тип данных в вашем методе
2. @Eng. Фуад: действительно, я сделал, спасибо за предупреждение. Исправлено.
Ответ №2:
Вы можете использовать compareTo:
public static Integer booleanToInteger(Boolean bool)
{
if(bool == null) return null;
else return bool.compareTo(Boolean.FALSE);
}
Комментарии:
1. Я бы не поощрял это, поскольку это довольно запутанно и неочевидно. И если вы это сделаете, я бы использовал
Boolean.FALSE
в качестве аргумента, чтобы пропустить автоматическую упаковку.2. … и неясный / запутанный код с меньшей вероятностью может быть оптимизирован компилятором JIT.
Ответ №3:
Если вы хотите сериализовать в символ, вы можете сделать
public static char toChar(final Boolean b) {
return b == null ? '?' : b ? '1' : '0';
}
Ответ №4:
Я не уверен, но просто выбрасываю его. вы можете использовать свой собственный класс декоратора.
Комментарии:
1. Шаблон дизайна декоратора позволяет вам настраивать вывод по-другому. Вы можете украсить свое значение
boolean
значением0
и1
.2. Вы видели, где OP запрашивал «наиболее оптимизированное» решение? Как вы думаете, подходят ли декораторы?
Ответ №5:
Используйте Thrift API:
TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
String json = serializer.toString(object);
Логическое значение будет равно 0 или 1 вместо true / false.
Комментарии:
1. Вы серьезно? Установка целой библиотеки, использование 2 объектов с фабриками и все это только для того, чтобы превратить строку в логическое…