我在java中创建了一个JSON构建器库,我的lib有一点bug。我注意到因为当我改变"诉讼的类型时#34;变量到int[]
而不是Integer[]
我的lib停止正常工作。我的想法是让第二个addProperty(..., Object[] value)
方法重载第一个方法addProperty(..., Object value).
package mypack;
public class JSON {
private static String $s = "\"";
private String name, json = "{";
public JSON() {
this.name = null;
}
public JSON(String name) {
this.setName(name);
}
public void setName(String name){
this.name = "var " + name + " = ";
}
public String getJson() {
return json;
}
public void addAttribute(String attribute, Object value){
json += $s + attribute + $s + ": ";
if(value instanceof JSON){
json += ((JSON) value).json + ", ";
} else if (value instanceof String) {
json += $s + value + $s + ", ";
} else {
json += value + ", ";
}
}
//THIS SHOULD BE USED BY int[].... I think :(
public void addAttribute(String attribute, Object[] value){
json += $s + attribute + $s + ": [";
for (int i = 0; i <value.length; i++) {
if(value[i] instanceof JSON){
json += ((JSON) value[i]).json + ", ";
} else if (value[i] instanceof String) {
json += $s + value[i] + $s + ", ";
} else {
json += value[i] + ", ";
}
}
json = json.substring(0, json.length() - 1) + "], ";
}
public void build(){
json = json.substring(0, json.length() - 2) + "}";
json = (name == null) ? json : (name + json);
}
}
为了测试它我使用了这个:
package mypack;
public class Test {
public static void main(String[] args){
int[] suit = {1,2,3};
JSON json = new JSON();
json.addAttribute("x", "suit");
json.addAttribute("y", suit );
json.build();
System.out.print(json.getJson());
}
}
PD:请不要回答建议使用预制的lib。我正在学习,在大学里我们习惯做西西弗斯学生,一遍又一遍地重做,直到时间结束。
答案 0 :(得分:5)
我认为这是对您问题的简化重写:
public class Foo {
public static void main(String[] args) throws Exception {
foo(new int[]{1,2,3});
}
static void foo(Object o) {
System.out.println("object");
}
static void foo(Object[] o) {
System.out.println("array");
}
}
为什么打印&#34;对象&#34;而不是&#34;数组&#34;?
答案:int[]
不是Object[]
的子类型,因为int
不是Object
的子类型。
Java的类型层次结构没有supremum,所以不幸的是,用一个可以是任何类型(或任何数组)的参数编写方法是不可能的。这就是为什么,如果您查看java.util.Arrays之类的API,您会看到许多方法在byte[]
,char[]
,double[]
,{{ 1}},float[]
,int[]
,long[]
和short[]
。