Shiny
Shiny

Reputation: 191

How to add generic object to list in java?

How to add a generic object to list in java?

Currently, I have two classes doing the same function and would like to integrate them together

public class MyClass1 {
    private List<Object1> myList = new ArrayList<>();

    public void addList(Object1 o) {
        myList.add(o);
    }
} 

public class MyClass2 {
    private List<Object2> myList = new ArrayList<>();

    public void addList(Object2 o) {
        myList.add(o);
}
} 

something like

public class MyClass {
    private List<Object> myList = new ArrayList<>();

    public void addList(Object o) {
        myList.add(o);
    }
} 

Upvotes: 2

Views: 1814

Answers (3)

Sean Van Gorder
Sean Van Gorder

Reputation: 3453

If you want the class to contain only Object1 or only Object2 and never anything else, you can combine the other two answers:

interface ObjInterface {
    // may be empty
}

public class MyClass<T extends ObjInterface> {
    private List<T> myList = new ArrayList<>();

    public void addList(T o) {
        myList.add(o);
    }
}

MyClass<Object1> object1only = new MyClass<>();
MyClass<Object2> object2only = new MyClass<>();

and add implements ObjInterface to the definitions of Object1 and Object2.

If you add methods common to both classes to ObjInterface, you can call those methods on the T objects in MyClass, since they're guaranteed to be a subclass of ObjInterface.

Upvotes: 1

Sebastian Siemens
Sebastian Siemens

Reputation: 2421

You can make both classes Object1 and Object2 implement the same interface 'ObjInterface'

public class MyClass {
    private List<ObjInterface> myList = new ArrayList<>();

    public void addList(ObjInterface o) {
        myList.add(o);
    }
}

Upvotes: 1

Mureinik
Mureinik

Reputation: 311338

You could make your own class generic:

public class MyClass<T> {
    private List<T> myList = new ArrayList<>();

    public void addList(T o) {
        myList.add(o);
    }
} 

Upvotes: 3

Related Questions