Как добавить общий объект в список в Java? - PullRequest
2 голосов
/ 01 апреля 2019

Как добавить универсальный объект в список в Java?

В настоящее время у меня есть два класса, выполняющих одну и ту же функцию, и я хотел бы объединить их вместе

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

что-то вроде

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

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

Ответы [ 3 ]

3 голосов
/ 01 апреля 2019

Вы можете создать собственный класс:

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

    public void addList(T o) {
        myList.add(o);
    }
} 
1 голос
/ 01 апреля 2019

Если вы хотите, чтобы класс содержал только Object1 или только Object2 и больше ничего, вы можете объединить два других ответа:

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

и добавьте implements ObjInterface к определениям Object1 и Object2.

Если вы добавляете методы, общие для обоих классов, в ObjInterface, вы можете вызывать эти методы для T объектов в MyClass, поскольку они гарантированно являются подклассом ObjInterface.

1 голос
/ 01 апреля 2019

Вы можете заставить оба класса Object1 и Object2 реализовывать один и тот же интерфейс ObjInterface

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

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