2012-07-05 139 views
3

我试图返回已提供给JSONObject类的所有名称(如在它们自己的数组中的所有键,但没有关联值)。我的代码是目前如下:当使用JSONObject的静态getNames方法时,Eclipse中的语法错误Java类

String names[] = new String[10]; 
names = JSONObject.getNames(jsonObj); 

的方法,我试图让该阵列由是这样的:

public static String[] getNames(JSONObject jo) { 
    int length = jo.length(); 
    if (length == 0) { 
     return null; 
    } 
    Iterator iterator = jo.keys(); 
    String[] names = new String[length]; 
    int i = 0; 
    while (iterator.hasNext()) { 
     names[i] = (String)iterator.next(); 
     i += 1; 
    } 
    return names; 
} 

这是我得到的错误:

The method getNames(JSONObject) is undefined for the type JSONObject 

但是,如果我将代码设置为故意返回并将其分配给错误类型的变量:

int inames = JSONObject.getNames(jsonObj); 

突出任一的JSONObject部分或上述行原因Eclipse来显示以下错误的jsonObj参数:

Type mismatch: cannot convert from String[] to int 

而突出getNames方法仍提供相同的错误之前。

我能从中得到什么? Eclipse似乎知道该方法在那里,因为它知道它的正确返回类型,但它声称该方法在类中是未定义的。

+0

Side建议#1:名称数组不需要预先初始化。你可以直接使用String [] names = XXX.getNames(jsonObj)。或者你可以简单地不在声明中分配任何值(第1行)。 – helios 2012-07-05 11:29:09

+0

方面建议#2:您可以使用'i ++;'递增变量。你的代码是可以的。它只是更短。 – helios 2012-07-05 11:29:44

+0

方面建议#3:如果没有属性,为什么要返回null?我应该简单地返回一个空数组(new String [0])。你可以简单地通过删除特殊检查并让剩下的代码完成剩下的工作(数组创建为0,迭代器从不说明hasNext为真)等。 – helios 2012-07-05 11:31:04

回答

1

当我遇到我的问题时,我正在使用的类在单独的包中。移动所有JSON类到相同的包,因为我写的类和删除软件包进口

import org.json.*; 

解决它。

1

看来方法getNames不是JSONObject的静态方法。我对吗?

它在哪个类中声明?

如果它是类X你应该做的:

X.getNames(jsonObj); 
+0

getNames是一个公共静态方法。我应该可以通过它的类名访问它。 – necrosmash 2012-07-05 11:45:40

1

你确定你没有对包含一个名为的JSONObject类类路径2的JAR文件?

+0

积极。这些文件只是这个项目的一部分,它们以.java文件的形式放在一个单独的包中。 – necrosmash 2012-07-05 11:48:32