Самый простой способ - создать базовый класс и наследовать от него A и B.
В методе вы используете базовый класс в качестве типа.
Это верно, так как A и B расширяют его.
Например:
class Base {
List<String> collection;
Base() {
collection = new ArrayList<>();
}
}
class A extends Base{
A(){
super()
}
}
class B extend Base{
B(){
super()
}
}
void methodTest(Base genericObj)
{
genericObj.collection.add("1");
}
Другая возможность - использовать интерфейс. Это было бы полезно, если коллекции не одного типа и, следовательно, не определены в базовом объекте.
Использование интерфейса:
interface MyInterface{
public ArrayList<> getCollection();
}
class A implements MyInterface {
List<String> collection;
A(){
collection = new ArrayList<>();
}
public ArrayList<> getCollection(){
return collection;
}
}
class B implements MyInterface{
List<String> collection;
B(){
collection = new ArrayList<>();
}
public ArrayList<> getCollection(){
return collection;
}
}
void methodTest(MyInterface genericObj)
{
genericObj.getCollection().add("1");
}