-1

次のようなことを行って 2 つのクラスを 1 つにすることで、クラスのメソッドの量を減らすことができるかどうか誰か教えてください。

public void duplicateEntries(String personName, String entryType) throws CustomException
{
    for (Entry entry : allEntries)
    {
        if ( entry instanceof entryType)
        {
            if (personName.equalsIgnoreCase(entry.getName()))
            {
                throw new CustomException("\nAn entry for " + 
                personName + "already exists. Entry has been cancelled.");
           }
        }
    }
}

コンパイルしません。コンパイラは次の行に「シンボルが見つかりません - entryType」と報告します。

if ( entry instanceof entryType)

元のコード:

public void duplicatePersonal(String personName) throws CustomException
    {
        for (Entry entry : allEntries)
        {
            if ( entry instanceof Personal)
            {
                if (personName.equalsIgnoreCase(entry.getName()))
                {
                    throw new CustomException("\nAn entry for " + 
                    personName + "already exists. Entry has been cancelled.");
               }
            }

        }
    }

    public void duplicateBusiness(String personName) throws CustomException
    {
        for (Entry entry : allEntries)
        {
            if ( entry instanceof Business)
            {
                if (personName.equalsIgnoreCase(entry.getName()))
                {
                    throw new CustomException("\nAn entry for " + 
                    personName + "already exists. Entry has been cancelled.");
               }
            }
        }
    }

コードをあまり最小化していないことはわかっていますが、このような方法で適用できる方法がいくつかあります。

4

2 に答える 2

5

重複を見つけたいもののタイプを渡さないのはなぜですか?

それは次のようなものかもしれません

public boolean hasDuplicates(String name, Class type) {
    for (Entry entry : allEntries) {
        if (type.isInstance(entry) && name.equalsIgnoreCase(entry.getName())) {
            return true;
        }
    }
    return false;
}

重複が見つかった場合はスローすることに依存しませんException。重複を探している場合、重複がある可能性があることを意味するため、それほど例外的ではありません:D

もちろん、あなたがこれを何に使用しているのかはわかりませんし、合格するのObject typeはあまり良くないかもしれませんが、これを書いた後はいつでもより良い解決策を思い付くことができます.

これを次のように使用します。

if (hasDuplicates(name, Personal.class)) {
    // handle duplicates
}
于 2013-05-03T15:31:42.533 に答える