仅将类名称作为字符串

时间:2014-06-23 09:47:14

标签: java class

我有一个接口Fruit,它在Apple和Banana中实现。在我的主要课程中,Fruit被称为以下:

Fruit fruit = new Apple();

如何检索“Apple”字符串?使用

fruit.getClass().getName()

OR

fruit.getClass().getSimpleName()

给出了java.lang.NullPointerException

我试图避免在AppleBanana中使用例如getClassName()

编辑:添加更多细节/方法,因为我上面的简化问题似乎没有指出问题。添加以下内容将意味着复制整个代码。同样,以下是简化。

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; clusterMethod which is saved inside Clusterer class when creating the new class i.e. new Clusterer(method). 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);
    }
}

以上看似乎正确吗?使用clusterer.next()时会发生nullException,而不使用setMethod()就可以正常工作。

1 个答案:

答案 0 :(得分:4)

评论回复:您的fruit.getClass()...电话会引发NullPointerException

这意味着您在测试班级名称时为fruit变量分配了null值,这可能会在 分配新名称后发生 Apple的实例。

null Object上调用方法会抛出NullPointerException

注意

作为事后的想法,如果在到达NullPointerException方法调用之前getClass()被抛出,那么您在代码的其他部分中会遇到一个不同的问题NullPointerException并且与运行时类名检查无关。