0

我正在使用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;
}
4

2 回答 2

3

This is a typical scenario where subtype polymorphism helps. Do the following

 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() } ... }

Then you can simply call do() on this.

If you are not free to change A, B, and C, you could apply the visitor pattern to achieve the same.

于 2013-10-25T19:18:05.523 回答
0

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

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

感谢多态性——顺便说一句,也感谢继承——你可以这样做:

//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可以不费吹灰之力地做的事情,而且效率更高?

于 2013-10-26T12:45:16.337 回答