如何使用另一类私有成员对象的类方法

时间:2015-07-07 01:13:55

标签: java class

我正在创建一个类,它的私有成员之一是另一个类的对象。当我尝试调用已在我的公共实例方法中创建的类的公共实例方法时,我得到一个NullPointerException。

我测试了它,当我从构造函数调用find函数时,它工作正常,但是当我从下一个随机函数调用find函数时,它给了我异常。发生了什么事?

public class Percolation
{
   private WeightedQuickUnionUF uf;
   private boolean sites[][];

   public Percolation(int N)//constructor
   {
       sites = new boolean[N][N];
       int arraySize = N * N;
       WeightedQuickUnionUF uf = new WeightedQuickUnionUF(arraySize);
       System.out.println("we found the first node at " + uf.find(31));
   }

   public void trialQuickFind()
   {
       System.out.println("we found the first node at " + uf.find(31));
   }
}   

3 个答案:

答案 0 :(得分:8)

在构造函数中,您阴影 uf。变化

WeightedQuickUnionUF uf = new WeightedQuickUnionUF(arraySize);

this.uf = new WeightedQuickUnionUF(arraySize);

Variable shadowing上的维基百科条目(部分),

  

在计算机编程中,当在某个范围内声明的变量(决策块,方法或内部类)与在外部范围内声明的变量具有相同的名称时,会发生变量阴影。在标识符(名称而不是变量)的级别上,这称为名称屏蔽。这个外部变量被称为内部变量,而内部标识符被称为掩盖外部标识符。

答案 1 :(得分:0)

您已声明了新的本地变量

*

与您的全局变量

不同
 WeightedQuickUnionUF uf = new WeightedQuickUnionUF(arraySize);

最好练习封装或使用setter和getter来避免这个问题

private WeightedQuickUnionUF uf;

答案 2 :(得分:0)

用于封装和抽象目的:

创建一个界面,比如说:

    public interface UfListener {
        getUf();
    }

WeightedQuickUnionUFimplements UfListener然后将其传递给uf阅读。

然后,给Percolation和UfListener的实例,并调用它:

uf = ufListener.getUf();