2011-06-14 134 views
11

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

是否有任何本机功能来做到这一点?如果不是,最好的方法是什么(最优化的方式)?

更新:我的意思是从Boolean中产生String

+1

什么方法*序列化*布尔'为“真”和“假”?或者你只是在谈论从'Boolean'生成'String'? – 2011-06-14 08:12:33

+0

你为什么想这样做? – 2011-06-14 08:12:53

+5

让'b'成为一个布尔值:'int i = b? 1:0;'。 – Kevin 2011-06-14 08:13:00

回答

10

如果你在谈论生产从给定Boolean一个String,则没有,没有产生“0”或“1”没有内置的方法,但是你可以很容易地把它写:

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

根据您的使用情况,如果input为空,让它抛出NullPointerException可能更合适。如果您遇到这种情况,那么您可以将方法仅限于第二行return

+0

看起来你错过了你的方法中的数据类型 – 2011-06-14 08:17:39

+0

@ Eng.Fouad:的确,我确实感谢你的提醒。现在修复。 – 2011-06-14 08:18:11

-1

我不确定,但只是扔掉它。你可以使用你自己的装饰类。

+0

什么?笏? INI? Wataguan? – 2011-06-14 08:25:47

+0

装饰设计模式可让您以不同的方式自定义您的输出。你可以将'boolean'装饰成'0'和'1'值。 – 2011-06-14 08:41:55

+0

您是否看到OP要求提供“最优化”解决方案?你认为装饰者有资格吗? – 2011-06-14 09:26:20

3

您可以使用CompareTo

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

我不会鼓励这一点,因为它很模糊而且不明显。并且*如果*你这样做,我会使用'Boolean.FALSE'作为参数,以便跳过自动装箱。 – 2011-06-14 08:43:04

+0

@Joachim Sauer:谢谢,我解决了。 – 2011-06-14 08:46:23

+0

...而且模糊/混淆代码不太可能被JIT编译器优化。 – 2011-06-14 09:28:17

1

如果你想序列化到一个字符,你可以做

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

使用节俭API:

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

将布尔0或1而不是真/假。

+7

你是认真的吗?安装一个完整的库,在工厂中使用2个对象,所有只是将一个字符串转换为布尔值... – 2014-06-20 08:10:15

相关问题