2015-07-21 32 views
0

我在單身人士的Java上練習,我必須使用cls參數才能完成它。我對Java很陌生,但還沒有遇到過。單身人士的CLS參數

public class Speakerphone extends Object{ 
public void shoutMessage() 

我必須執行以下操作來完成代碼。我如何利用cls參數來完成此功能?

  1. shoutMessage
  2. 將消息發送給所有它們是 的CLS參數

@參數講話者發話方,其消息將被髮送情況下,聽衆的(發話)

@參數cls一個Class對象,表示監聽器 爲了接收消息而應該擴展的類型(Class)

@return nothing

+0

所以,你需要2個參數添加到shoutMessage()方法。一個必須是Talker類型,而另一個必須是Class類型。如何開始做到這一點?如果你不知道什麼方法參數,那麼你不應該處理單身人士和聽衆。從基本的東西開始。 –

回答

0

這樣的事情?

發話:

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

感謝您花時間寫出來。我會仔細查看它,看看它是如何爲我工作的。 –

+0

是的。我仍然對它的cls參數部分感到困惑。那和代碼的c部分代表什麼? –

+0

表示泛型,它有助於檢測編譯時的錯誤。 –