Java将方法合并为一个?

时间:2013-05-03 15:19:43

标签: java

有人可以告诉我是否有可能通过执行以下操作来减少我班级中的方法数量,使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.");
               }
            }
        }
    }

我知道它的代码没有那么多,但是有一些像这样的方法我也可以应用它。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

也许这样的事情可行:

public void verifyUnique(String entryName, Class<? extends Entry> type) throws CustomException {
    for (Entry entry : allEntries) {
        if (type.isInstance(entry) && entryName.equalsIgnoreCase(entry.getName()) {
           throw new CustomException("An entry for " + entryName " already exists");
        }
    }
}

...
verifyUnique("name", Personal.class);

但这并不是很优雅。我宁愿添加一个getter getType(),它返回一个枚举到Entry。

public void verifyUnique(String entryName, EntryType type) throws CustomException {
    for (Entry entry : allEntries) {
        if (entry.getType() == type && entryName.equalsIgnoreCase(entry.getName()) {
           throw new CustomException("An entry for " + entryName " already exists");
        }
    }
}