На данный момент у меня есть следующие классы:
public abstract class Entity
{
private final String id;
private String name;
protected List <CustomerListener> listenerList = new ArrayList<>();
public void addEntityListener (CustomerListener listener)
{
listenerList.add(listener);
}
public void setName (String name)
{
this.name = name;
listenerList.forEach(listener) ->
{
listener.nameChanged(name);
}
}
//Imagine a constructor and some getter ... ;)
}
public class Customer extends Entity
{
private String company;
private String businessUnit;
private String position;
public void setCompany (String company)
{
this.company = company;
listenerList.forEach(listener) ->
{
listener.companyChanged(company);
}
}
//Imagine a construtor and some more getter and setter.
}
Следующие экземпляры интерфейса хранятся в ArrayList выше:
public abstract interface EntityListener
{
void nameChanged (String name);
}
public interface CustomerListener extends EntityListener
{
void businessUnitChanged (String businessUnit);
void companyChanged (String company);
void positionChanged (String position);
}
Мое намерение былочто я хочу обрабатывать каждое изменение значения в экземпляре клиента - или в другом экземпляре из экземпляров, наследующих сущность или клиента, - по-другому.Моя проблема в том, что я хочу иметь только один список для хранения этих слушателей.Моя идея заключалась в том, чтобы создать его в сущности суперкласса "Entity".Но я не могу использовать базовый тип слушателя "EntityListener", потому что тогда я не могу вызвать методы из его дочерних интерфейсов.
Как мне просто создать один список для хранения всех слушателей.Но тип, хранящийся в этом списке, должен зависеть от того, какой подкласс используется?Возможно ли это вообще с моим дизайном?
Это важно, потому что я хочу расширить иерархию на другие классы.
Решение, которое я попробовал, состояло в том, что я создал void addCustomerListener (слушатель CustomerListener) в классе клиента, но это приводит кта же проблема.