-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 回答
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");
        }
    }
}
于 2013-05-03T15:35:10.273 回答