user9791370
user9791370

Reputation: 339

throwing an exception and continuing to receive data

In a piece of code I'm currently working on, I'm taking in an ArrayList of data to be added to an object, from a user. I'm checking each item in the ArrayList against the current list of that type of data for the object, in order to make sure it's not in the list already.

Is there a way to throw an exception for one item in the passed- in list, to tell the user it's in the list already- and then to keep going and add the next items in the passed-in list to my current list if they aren't there already?

Upvotes: 0

Views: 128

Answers (2)

Jim Garrison
Jim Garrison

Reputation: 86774

The short answer is that yes, you can do this, but it usually is highly discouraged.

Some sample pseudocode:

for (Item i : inputList)
{
    try
    {
        myObject.addItem(i);
    } 
    catch (MyCustomDuplicateItemException ex)
    {
        // Tell the user there was a duplicate
    }
}

However, this is using exceptions for what should be flow control. Ideally you would write the addItem() method to return a boolean value (i.e. true) if the item was successfully added, and the other value (false) if the item was a duplicate and NOT throw an exception.

Upvotes: 0

user9791370
user9791370

Reputation: 339

Update: i solved the problem by surrounding that block of code with a try/catch. Here's my code to clarify:

    public void addCategories(ArrayList<BookCategory>categories) {
    boolean exists;

    for(int index = 0; index <categories.size(); index++) {//iterate through passed array list
    try {   
        //for each element, check if it exists in the current category list.
        exists = checkBookCategory(categories.get(index));
        if (exists == false)
        {subjectCategories.add(categories.get(index));}
        else {
     throw new IllegalArgumentException("Item " + categories.get(index) + " already in list.");         }
    }catch(IllegalArgumentException ie) {
        System.out.println(ie);
    }   }
}

Thanks @JimGarrison!

Upvotes: 1

Related Questions