我正在使用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;
}
答案 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可以自己做的事情而不需要任何努力和更有效率?