Java将方法简化为一个?

Java将方法简化为一个?,java,Java,有没有人能告诉我,通过如下操作将2个类变成1,是否可以减少类中的方法数量: public void duplicateEntries(String personName, String entryType) throws CustomException { for (Entry entry : allEntries) { if ( entry instanceof entryType) { if (personName.eq

有没有人能告诉我,通过如下操作将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.");
               }
            }
        }
    }

我知道这并没有使我的代码最小化很多,但是有一些类似的方法我也可以应用它。

为什么不传递你想要找到重复的东西的类型呢

可能是这样的

public boolean hasDuplicates(String name, Class type) {
    for (Entry entry : allEntries) {
        if (type.isInstance(entry) && name.equalsIgnoreCase(entry.getName())) {
            return true;
        }
    }
    return false;
}
如果发现重复项,我不会依赖于抛出一个
异常
,因为如果您正在寻找重复项,那么这意味着可能存在重复项,所以它不是那么异常:D

当然,我不知道你在用它做什么,也许传递
对象类型
不是很好,但是在你写了这个之后,你总能想出一个更好的解决方案

您可以像下面这样使用它:

if (hasDuplicates(name, Personal.class)) {
    // handle duplicates
}

也许这样的方法可以奏效:

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);

“它抱怨类变量”如果“它”指的是编译器,它不会抱怨,只是报告。说到这里,当它报告错误时,复制/粘贴它们而不是解释它们。这个问题对我来说没有意义,看起来你只需要按名称检查重复条目。只需循环浏览条目并检查名称是否与参数相等。@LakshithaRanasingha有两种条目类型-业务条目和个人条目。我只想检查同一条目中是否有重复项。因此,一个人可以有一个业务条目和一个个人条目,但每个条目不能超过一个。这就是为什么我需要检查条目的类型。希望这是有意义的。您可以将条目存储在某种类似地图的数据结构中。正如我在前面的问题中所建议的,我喜欢创建一个getType方法。从未使用过enum,但将尝试使用它。Thanks@albertozaccagni如何传递我的arrayList类型?如果我使用上面的例子,我只是不断得到一个编译错误“找不到符号-类类型”@albertozaccagni抱歉,我应该解释得更好,我的意思是我无法得到hasDuplicates方法进行编译。它在以下行报告“找不到符号-类类型”:如果(entry instanceof type..appologies如果我错过了什么,这是我第一次使用java。完全是我的错,请参阅我的固定答案,对此表示抱歉:P@AlbertoZaccagni谢谢。我应该点击一下,下面的用户在他的帖子里写了这个,我从来没有注意到。谢谢你的帮助。@AlbertoZaccagni关于传递类型的主题是可以将类型存储在一个变量中以添加到我的arrayList中。因此,不必使用entry=new Personal(firstName,lastName,street,town,postcode.toUpperCase(),dob);我可以使用entry=new type(firstName,lastName,street,town,postcode.toUpperCase(),dob);?
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");
        }
    }
}