将JsonElement addProperty()组合到一个方法中

时间:2013-10-25 19:11:54

标签: java json gson

我正在使用JsonElements及其addProperty方法。 JsonElement有4个重载的addProperty方法,我想将它们压缩成一个,以便更容易添加属性。这就是我刚开始编写的内容,我意识到棘手的部分是要弄清楚字符串是Number

有关如何改进此方法的任何想法?

public JsonElementBuilder addProperty(final String property, final Object value)
{

if (parent instanceof JsonObject) {

        if (value instanceof Boolean) {
            ((JsonObject) parent).addProperty(property, (Boolean)value);            
        } else if (value instanceof Character) {
            ((JsonObject) parent).addProperty(property, (Character)value);
        } else if (value instanceof Number) {
            ((JsonObject) parent).addProperty(property, (Number)value);
        } else if (value instanceof String) {
            if (isInteger((String)value))
            {
                ((JsonObject) parent).addProperty(property, (Number)value);
            } else {
                ((JsonObject) parent).addProperty(property, (String)value);
            }
        }
    }

private boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    return true;
}

2 个答案:

答案 0 :(得分:2)

这是子类型多态性有帮助的典型场景。请执行以下操作

 interface I {
   void do();
 }

 class A implements I { void do() { doA() } ... }
 class B implements I { void do() { doB() } ... }
 class C implements I { void do() { doC() } ... }

然后你可以简单地调用do()。

如果您无法自由更改A,B和C,则可以应用访客模式来实现相同目标。

答案 1 :(得分:0)

你能解释为什么要这样做吗? 重载的方法,就像你调用它们一样,被称为Polymorphism,它只是一个很棒的Java功能,它可以精确地让你避免在你的方法中使用那种代码。

您可以为所有不同的类进行一次调用,而Java选择的正确方法比if ... else代码消耗的资源少......

感谢多态 - 而btw也归功于继承 - 你可以这样做:

//Many different types...
boolean boolProp = true;
char charProp = 'a';
int intProp = 12;
double dblProp = 1.50;
String strProp = "Polymorphism rocks!";

//One method name for all types...
jsonElement.addProperty("prop1", boolProp);
jsonElement.addProperty("prop2", charProp);
jsonElement.addProperty("prop3", intProp);
jsonElement.addProperty("prop4", dblProp);
jsonElement.addProperty("prop5", strProp);

那么......你为什么要自己写一个方法来做一些Java可以自己做的事情而不需要任何努力和更有效率?