Comment avoir un constructeur qui accepte une interface?

RShome:

Je suis en train d'apprendre Java en faisant des défis de codage. Je peux trier de comprendre les concepts en lisant la théorie mais ne peut pas les Appy à des problèmes de codage, pour une raison quelconque.

J'ai écrit une interface et maintenant besoin d'écrire un constructeur dans la classe AlertService, qui accepte cette interface (AlertDAO). Je ne comprends pas vraiment le concept.

Quelqu'un peut-il expliquer?

J'ai ajouté l'interface et ajouté un constructeur, mais ne savez pas comment faire ce constructeur ACCEPTER la nouvelle interface? L'espoir que je fais sens.

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

class AlertService {
    private final MapAlertDAO storage = new MapAlertDAO();

    public UUID raiseAlert() {
        return this.storage.addAlert(new Date());
    }

    public Date getAlertTime(UUID id) {
        return this.storage.getAlert(id);
    }

}

interface AlertDAO {

    public UUID addAlert(Date time);
    public Date getAlert(UUID id);

}

class MapAlertDAO implements AlertDAO {
    private final Map<UUID, Date> alerts = new HashMap<UUID, Date>();

    public UUID addAlert(Date time) {
        UUID id = UUID.randomUUID();
        this.alerts.put(id, time);
        return id;
    }

    public Date getAlert(UUID id) {
        return this.alerts.get(id);
    }
}
KeeyPee:

Le constructeur de la AlertService est:

public AlertService() {
}

Un constructeur est pour la création d'un objet de la classe, comme ceci:

AlertService alertService = new AlertService();

Si vous voulez ajouter le AlertDAO au constructeur, il ressemble à ceci:

public AlertService(AlertDAO alert){
    // do something with alert
}

Un constructeur en Java est une méthode spéciale qui est utilisée pour initialiser les objets. Le constructeur est appelé lorsqu'un objet d'une classe est créée. Il peut être utilisé pour définir les valeurs initiales pour les attributs d' objet ref: https://www.w3schools.com/java/java_constructors.asp

Edit: Si vous voulez avoir la classe AlertService à l'aide de l'interface au lieu de l'MapAlertDAO, l'utiliser comme ceci:

class AlertService {
    private AlertDAO storage;

    public AlertService(AlertDAO alert) {
        this.storage = alert;
    }

    public UUID raiseAlert() {
        return this.storage.addAlert(new Date());
    }

    public Date getAlertTime(UUID id) {
        return this.storage.getAlert(id);
    }

}

Maintenant, vous pouvez passer votre MapAlertDAO au AlertService.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=313896&siteId=1
conseillé
Classement