在另一个类中引用基本Java对象

时间:2013-07-23 18:52:31

标签: java oop object

我是一名用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对象时,我收到错误,因为它说无法找到它。

我知道我在这里犯了一些愚蠢的错误,但我不确定它是什么。很抱歉,如果我在描述代码时使用了错误的术语。任何帮助或建议将不胜感激。

4 个答案:

答案 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。

另外,不要在构造函数中创建实例。