nullPointerException,猜测使用getClass()。getName()

时间:2014-06-23 11:17:26

标签: java classname

重新提交更详细的问题。问题是在clusterer.next()中发生的nullPointerException。下面是该程序的简化版本,我希望您能注意到问题所在。

public class Clustering {
    private DistanceMeasure measure;  //Manhattan or Euclidean
    private ClusterMethod method;  //SingleLinkage or CompleteLinkage
    private Clusterer clusterer;

    public static void main(String[] args) {
    new Clustering().start();
    }
    Clustering() {
        measure = new Manhattan();
        method = new SingleLinkage(measure);
        clusterer = new Clusterer(method);
    }
    void start() {
        clusterer = setMethod();
        clusterer.next(); //would use the ClusterMethod to do some calculations; the nullException occurs here
    }
    Clusterer setMethod() {
        measure = new Euclidean();
        if (method.getClass().getSimpleName().equals("SingleLinkage")) {
             method = new CompleteLinkage(measure);
        }
        else method = new SingleLinkage(measure);
        return new Clusterer(method);
    }
}
public class Clusterer {
    private ClusterMethod method;

    Clusterer(ClusterMethod method) {
        this.method = method;
    }
    void next() {
        System.out.println(method.calculateDistance(0,1); //calculateDistance simply returns the 'distance' between 2 numbers.
    }
} 

如果我不使用setMethod();

,上面的代码可以很好地工作

2 个答案:

答案 0 :(得分:2)

如果您comment关于发生异常的位置是正确的,则methodnull。您应该通过使用调试器来逐步执行该代码并检查语句来验证这一点。或者,为所有涉及的变量添加Sysouts。

如果这是意料之外的,请说您确信method是由代码的其他部分设置的,请在其他部分添加断点或输出,以验证它实际上正在执行您认为正在执行的操作,并且也按照正确的顺序。

答案 1 :(得分:0)

事实证明我是个白痴:)我基本上是在某处检查

"SingleLinkage".equals("Single Linkage") 

当然总是假的,并且没有为方法分配任何ClusterMethod。这里的代码很好;东西在另一个地方出了问题。