问题 序列化布尔值为“1”和“0”而不是“true”和“false”


我找不到任何方法 Boolean 将布尔值序列化为“1”和“0”而不是“true”和“false”的类。

有没有本地功能呢?如果没有,最好的方式是什么(最优化的方式)?

更新:我的意思是生产一个 String 出一个 Boolean


6134
2018-06-14 08:10


起源

什么方法 连载 一个 Boolean “真实”和“虚假”?或者你只是在谈论制作一个 String 从一个 Boolean? - Joachim Sauer
让 b 是一个布尔值: int i = b ? 1 : 0;。 - Kevin
@Kevin:小心!他在谈论 Boolean, 在这种情况下 b 可能 null! - Joachim Sauer
@Kevin你的意思是 int i == b ? 1 : 0; ? - Eng.Fouad
@Eng.Fouad:不。 - Kevin


答案:


如果 你在谈论制作一个 String 从给定的 Boolean,然后不,没有内置方法产生“0”或“1”,但你可以很容易地写出来:

public static String toNumeralString(final Boolean input) {
  if (input == null) {
    return "null";
  } else {
    return input.booleanValue() ? "1" : "0";
  }
}

根据您的使用情况,让它抛出一个更合适 NullPointerException 如果 input 一片空白。如果是这种情况,那么您可以将方法减少到第二个 return 单独行。


10
2018-06-14 08:13



好像你错过了方法中的数据类型 - Eng.Fouad
@Eng.Fouad:我确实做到了,谢谢你的单挑。现在修复了。 - Joachim Sauer


您可以使用 相比于

public static Integer booleanToInteger(Boolean bool)
{
    if(bool == null) return null;
    else return bool.compareTo(Boolean.FALSE);
}

3
2018-06-14 08:36



我不鼓励这样做,因为它非常混淆且不明显。和 如果 你这样做,我会用 Boolean.FALSE 作为参数,为了跳过自动拳击。 - Joachim Sauer
@Joachim Sauer:谢谢,我修好了。 - Eng.Fouad
... JIT编译器不太可能优化模糊/混淆代码。 - Stephen C


如果你想序列化为char,你可以做

public static char toChar(final Boolean b) {
    return b == null ? '?' : b ? '1' : '0';
}

1
2018-06-14 08:44





我不确定,只是把它扔出去。你可以使用自己的Decorator类。


-1
2018-06-14 08:14



什么?笏? INI? Wataguan? - Buhake Sindi
装饰器设计模式允许您以不同方式自定义输出。你可以装饰你的 boolean 到了 0 和 1 值。 - Talha Ahmed Khan
你有没有看到OP要求“最优化”的解决方案?你认为装饰者有资格吗? - Stephen C


使用Thrift API:

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
String json = serializer.toString(object);

它将布尔值设置为0或1而不是true / false。


-2
2018-06-20 08:09



你是认真的吗?安装整个库,使用工厂的2个对象,只需将字符串转换为布尔值... - Matthieu Napoli