Question

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...)?

Was it helpful?

Solution

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.

OTHER TIPS

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

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top