SearchableByName接口保持返回null

时间:2013-07-09 15:20:42

标签: java search interface

我的目标是搜索多树结构,以查看哪个项与我要查找的名称相匹配。我这样做是通过在我需要搜索的每个类中实现一个名为SearchByName的接口来实现的。

我的数据包含的方式是我有一个名为Party的PartyList,它由Party对象组成,每个对象都有一个名为cave的对象,每个Party都有一个名为Members的ArrayList,由每个都有一个名字的Creature对象组成,并且每个生物都有一个ArrayList,称为工件,由Artifact对象组成,每个对象都有一个名字;

每次搜索时,即使应该匹配,搜索也会返回null。

这是我执行搜索的代码:

for ( Party p : SorcerersCave.theCave.parties ){
                SearchableByName foundItem = p.searchByName( name );
                if ( foundItem != null ) {
                    GenerateInterface.theGame.printOutput( "\t" + foundItem );
                } else {
                    GenerateInterface.theGame.printOutput( "Item NOT FOUND" );
                }
                break;
            }

这是我正在实施的界面:

interface SearchableByName {
public SearchableByName searchByName (String name );
public String getName();

}

这是在Party中实现的界面:

public SearchableByName searchByName ( String n ) {
    if ( getName() == n ) {
        return this;
    } else {
        for ( Creature c : members ) {
            SearchableByName found = c.searchByName( n );
            if ( found != null ) {
                return found;
            }
        }
    }
    return null;
}

这是在Creature中实现的界面:

public SearchableByName searchByName ( String n ) {
    if ( getName() == n ) {
        return this;
    } else {
        for ( Artifact a : artifacts ) {
            SearchableByName found = a.searchByName( n );
            if ( found !=null ) {
                return found;
            }
        }
    }
    return null;
}

最后我在Artifact中实现了接口:

public SearchableByName searchByName ( String n ) {
    return ( getName() == n ) ? this : null;
}

这是我第一次尝试搜索课程,而不是在顶层做所有事情。

1 个答案:

答案 0 :(得分:1)

更改以下行:

getName().equals(n);

但是请确保getName永远不为null,如果它可以为null,则进行空检查。