我有一个接口Fruit,它在Apple和Banana中实现。在我的主要课程中,Fruit被称为以下:
Fruit fruit = new Apple();
如何检索“Apple”字符串?使用
fruit.getClass().getName()
OR
fruit.getClass().getSimpleName()
给出了java.lang.NullPointerException
我试图避免在Apple
和Banana
中使用例如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()就可以正常工作。
答案 0 :(得分:4)
评论回复:您的fruit.getClass()...
电话会引发NullPointerException
。
这意味着您在测试班级名称时为fruit
变量分配了null
值,这可能会在 分配新名称后发生 Apple
的实例。
在null
Object
上调用方法会抛出NullPointerException
。
注意强>
作为事后的想法,如果在到达NullPointerException
方法调用之前getClass()
被抛出,那么您在代码的其他部分中会遇到一个不同的问题NullPointerException
并且与运行时类名检查无关。