我是一名用Java开发的初学者,我在类中引用了一个对象(来自不同的类)时遇到了一些问题。
这是我用来创建对象的代码,来自文件“Neighborhoods.java”。
public class Neighborhoods {
// variables
String name;
int vertices;
double[] latCoords;
double[] longCoords;
public Neighborhoods() {
Neighborhoods fisherHill = new Neighborhoods();
fisherHill.name = "Fisher Hill";
fisherHill.vertices = 4;
fisherHill.latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
fisherHill.longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};
}
}
然后当我从另一个不同的类(称为“inPolygon”)调用一个函数时,我试图在我的主类中使用我创建的对象“fisherHill”(来自类邻居)。
inPolygon.check(Neighborhoods.fisherHill.vertices);
但由于某种原因,当我尝试引用fisherHill对象时,我收到错误,因为它说无法找到它。
我知道我在这里犯了一些愚蠢的错误,但我不确定它是什么。很抱歉,如果我在描述代码时使用了错误的术语。任何帮助或建议将不胜感激。
答案 0 :(得分:1)
你有几个错误:
Neighborhoods fisherHill = new Neighborhoods();
为什么要在constructor内实例化同一个类的新对象?调用构造函数是因为已经创建了此类的新对象。此新对象引用为this
。这是初始化新对象的类字段的正确方法:
this.name = "Fisher Hill";
this.vertices = 4;
this.latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
this.longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};
正如您在其他答案中所看到的,this
可以被省略。我个人更喜欢把它放在一起,它使代码对我来说更具可读性。
和
inPolygon.check(Neighborhoods.fisherHill.vertices);
没有这样的static field Neighborhoods.fisherHill
。即使它在那里,也无法访问fisherHill.vertices
,因为它有default accessibility。
你应该创建一个Neighborhoods对象,保持对它的引用并通过getter提取vertices
字段:
final Neighborhoods n = new Neighborhoods();
final int numVertices = n.getVertices();
inPolygon.check(numVertices);
在邻域类中添加vertices
字段的getter:
public int getVertices() {
return this.vertices;
}
我建议你拿一本Java书,因为你显然缺乏基本的Java和OOP知识。
答案 1 :(得分:0)
你的构造函数中有一个递归调用。
违规行:
Neighborhoods fisherHill = new Neighborhoods();
答案 2 :(得分:0)
它可能应该是
public class Neighborhoods {
// variables
private final String name;
private final int vertices;
private final double[] latCoords;
private final double[] longCoords;
public Neighborhoods() {
name = "Fisher Hill";
vertices = 4;
latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};
}
public int getVertices() {
return vertices;
}
//and some more getters
}
然后在你的其他课堂电话
inPolygon.check(new Neighborhoods().getVertices());
答案 3 :(得分:0)
回答你的问题:
inPolygon.check(Neighborhoods.fisherHill.vertices);
但由于某种原因,当我尝试引用fisherHill对象时,我收到错误,因为它说无法找到它。
在这里你要做一个静态参考,只有当它是一个静态成员时才能访问fisherHill。
另外,不要在构造函数中创建实例。