Ho due tipi di flussi di dati che implementano entrambi la stessa interfaccia:
public interface DataReceiver {
public Data getData();
}
public class DeviceDataReceiver implements DataReceiver {
// Receives data from an external device
public Data getData();
}
public class PlaybackDataReceiver implements DataReceiver {
// Receives data from textfile
public Data getData();
}
Il DeviceDataReceiver
può restituire null
, indicando che non ci sono nuovi dati disponibili, o che il dispositivo non è stato in grado di rilevare alcun nuovo dato. Il PlaybackDataReceiver
restituisce null
se tutti i dati del file sono stati restituiti. Entrambi dovrebbero essere interrogati in un ciclo while.
Il problema che sto avendo è come indicare che non ci sono nuovi dati disponibili, quindi lavorare con l'interfaccia usando l'iniezione delle dipendenze ha più senso. Stavo pensando di aggiungere questo metodo alla mia interfaccia:
public boolean hasNext();
Dove DeviceDataReceiver
restituisce sempre true (poiché possono sempre esserci nuovi dati) e PlaybackDataReceiver
restituisce true, a meno che non abbia raggiunto EOF.
Le classi verrebbero interrogate tramite l'interfaccia in questo modo:
DataReceiver rec = getDataReceiverImplementation();
while(rec.hasNext()) {
Data data = rec.getData();
if(data != null) { /* perform some action */ }
}
In questo modo è possibile iniettare entrambe le classi e il ciclo uscire automaticamente per PlaybackDataReceiver
. Per uscire dal ciclo per DeviceDataReceiver
, l'utente dovrebbe inviare un tipo di segnale, ad esempio premere un pulsante per interrompere la ricezione dei dati.
È comprensibile? Dovrebbe diventare parte di una biblioteca che sto scrivendo.