打印输出函数中的java变量消失

打印输出函数中的java变量消失,java,Java,+在求值==之前求值,这意味着您可以编写 public boolean isHeritage(String s){ System.out.println(2+s+ (getGeneralization(s)==null)); return getGeneralization(s) != null; } 相反。要按预期获得结果,请编写 System.out.println((2+s+ getGeneralization(s))==null); 但是,这不会打印出来 System

+在求值==之前求值,这意味着您可以编写

public boolean isHeritage(String s){
    System.out.println(2+s+ (getGeneralization(s)==null));
    return getGeneralization(s) != null;
}
相反。要按预期获得结果,请编写

System.out.println((2+s+ getGeneralization(s))==null);
但是,这不会打印出来

System.out.println(2+s+ (getGeneralization(s)==null));
但是

显然,getGeneralizations返回null。否则会出现第三次打印

您的findSubClass方法似乎也不正确。我假设您想对该子类进行深度优先搜索。应该是这样的:

2Stringtrue

这一错误从何而来?getGeneralizationscall中没有NullPointerException或任何其他RuntimeException吗?表示不为空的错误从何而来?您是否将其添加到程序输出中?@SMA这是另一个函数getGeneralizations==null,它使用相同的名称进行泛化。@Cidian是的,我添加了personnaly,我已更正它以避免混淆。您可以粘贴getGeneralization方法的内容吗?@BroLegend:不,您只需忽略gen.findSubClasss的结果。谢谢,我忘了在gen.findsubclass之前添加return。@BroLegend:如果只添加一个return而不检查null,则不会搜索所有子类,只搜索第一个子类。在找到某个对象或搜索所有子类之前,不要返回任何内容。第一个匹配或第一个值甚至为null?@BroLegend:null表示尚未找到该类。由于类应该具有唯一的名称,因此只能找到一次该类。但是看看我的答案。我为它添加了一些代码。在我的评论中,我只是想确保在else和gen.findSubClasss之间添加一个return;我不会这么做的。事实上,在任何情况下从循环中中断很少有意义,因为在第一次迭代后退出循环。
2boolean
2Stringtrue
public Generalization findSubClass(String s){        
     for(Generalization gen : subClasses){
        if(s.equals(gen.getName())) return gen;
        else {
            Generalization subGen = gen.findSubClass(s);
            if (subGen != null)
                return subGen;
        }
     }
     return null;
}