我觉得这很简单,因为我很确定我以前做过,但我似乎无法让它发挥作用。 我的班级是:
public class City
{
String start = null;
String end = null;
int weight = 0;
}
我正在做:
City cityGraph[] = new City[l];
当我尝试访问cityGraph [x] .start时,我得到一个空指针异常,所以我想我也需要初始化数组中的每个元素,所以我这样做:
for(int j = 0; j < l; j++)
{
cityGraph[j] = new City();
}
但它给了我这个错误:
No enclosing instance of type Graphs is accessible.
Must qualify the allocation with an enclosing instance
of type Graphs (e.g. x.new A() where x is an instance of Graphs).
我不知道这意味着什么,或者如何解决它。任何帮助将不胜感激!
答案 0 :(得分:5)
当您将public class City
声明为public class Graphs
的内部类时,可能会发生这种情况
public class Graphs {
public class City {
}
}
这样,如果不首先构建City
实例,就无法构建Graphs
。
您需要按如下方式构建City
:
cityGraph[j] = new Graphs().new City();
// or
cityGraph[j] = existingGraphsInstance.new City();
这实在是没有意义。而是将City
提取到一个独立的类中,
public class Graphs {
}
public class City {
}
或通过声明它static
使其成为静态嵌套类。
public class Graphs {
public static class City {
}
}
无论哪种方式,您都可以通过City
构建新的new City()
。
答案 1 :(得分:1)
您的类似乎不是静态内部类,这意味着它需要外部类的实例才能实例化。
有关静态与内部类的更多信息 http://mindprod.com/jgloss/innerclasses.html
答案 2 :(得分:0)
我实际上已经回答了我自己的问题。使类静态修复它。我不知道为什么在我发布之前我没有想到这一点......希望这将有助于将来的人。