Complex ArrayList with different type elements

2.6k views Asked by At

I'm creating a complex data type. It's an ArrayList (chapters) of ArrayLists (chapter). However, there are two versions of the chapter, each with it's respected elements and data types.

How could I declare my complex data type so I could add one or another (to have, e.g., ArrayList(chapters) which contains (chapter_typeI,chapter_typeII,chapter_typeII,chapter_typeI,chapter_typeII, etc...)?

4

There are 4 answers

2
Mario F On BEST ANSWER

make an abstract class, from which the both type of chapters inherit, and then declare a list of this type.

public abstract class AbstractChapter {}

public class ChapterTypeOne extends AbstractChapter {}

public classs ChapterTypeTwo extends AbstractChapter {}

List<AbstractChapter> chapters = new ArrayList<AbstractChapter>;

The operations that you are going to call should be declared in the abstract class, and then overriden as necessary in the specific implementations.

0
Arani On

The best way is to use inheritance to define an abstract class "Chapter", and derive the types of chapters from the abstract class.

0
aravind On

You could have an abstract base class "Chapter", from which ChapterI and ChapterII gets inherited.

1
Amit Deshpande On

It is always better to create List of types than actual object if you have clear hierarchy defined.

 List<Type> list = new ArrayList<Type>();

Now Type can be your interface

interface Type {
    void method();
}

Now you can have

SubType1 implements Type {
    void method() {
        // do something.
    }
}

SubType2 implements Type {
    void method() {
        // do something.
    }
}

Also you can use Abstract Skeletal pattern in which you can have class AbstractType with default implementation if required