Параметр CLS в синглетонах

Я делаю упражнение на Java на Singletons, и мне нужно использовать параметр cls для его завершения. Я очень плохо знаком с Java и еще не сталкивался с этим.

public class Speakerphone extends Object{
public void shoutMessage()

Я должен сделать следующее, чтобы завершить код. Как я могу использовать параметр cls, чтобы закончить это?

  1. shoutMessage
  2. Посылает сообщение всем слушателям, которые являются экземплярами параметра cls

@param talker Talker, чье сообщение будет отправлено (Talker)

@param cls объект Class, представляющий тип, из которого должен быть расширен прослушиватель для получения сообщения (Class)

@ ничего не вернуть

1 ответ

Что-то вроде этого?

Говорун:

public interface Talker<T> {

    public T getMessage();
}

Слушатель:

public interface Listener<T> {

    public void receive(T message);
}

Громкая связь:

public final class Speakerphone {

    public static final Speakerphone INSTANCE = new Speakerphone();
    private Map<Class, List<Listener>> listenersByTypes = new HashMap<>();

    private Speakerphone() {
    }


    public <T> void register(Listener<T> listener, Class<T> c){
        List<Listener> listeners = listenersByTypes.get(c);
        if (listeners == null){
            listeners = new ArrayList<>();
            listenersByTypes.put(c, listeners);
        }
        listeners.add(listener);
    }

    public <T> void unregister(Listener<T> listener, Class<T> c){
        List<Listener> listeners = listenersByTypes.get(c);
        if (listeners != null){
            listeners.remove(listener);
        }
    }

    public <T> void shoutMessage(Talker<T> talker, Class<T> c) {
        T message = talker.getMessage();
        List<Listener> listeners = this.listenersByTypes.get(c);
        for (Listener<T> listener : listeners) {
            listener.receive(message);
        }
    }    
}
Другие вопросы по тегам