Cómo tener un constructor que acepta una interfaz?

RShome:

Estoy tratando de aprender Java haciendo algunos retos de codificación. Puedo ordenar de entender los conceptos mediante la lectura de la teoría, pero no los puedo aplicar para los problemas de codificación, por alguna razón.

He escrito una interfaz y ahora tiene que escribir un constructor en la clase AlertService, que acepte esta interfaz (AlertDAO). Realmente no entiendo el concepto.

¿Puede alguien explicar?

He añadido la interfaz y añade un constructor, pero no está seguro de cómo hacer que el constructor de aceptar la nueva interfaz? Esperanza que estoy haciendo sentido.

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:

El constructor de la AlertService es:

public AlertService() {
}

Un constructor es para crear un objeto de la clase, así:

AlertService alertService = new AlertService();

Si desea añadir el AlertDAO al constructor, que se ve así:

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

Un constructor en Java es un método especial que se utiliza para inicializar objetos. El constructor se llama cuando se crea un objeto de una clase. Puede ser utilizado para establecer los valores iniciales de los atributos de objeto ref: https://www.w3schools.com/java/java_constructors.asp

Editar: Si usted quiere tener la clase AlertService usando la interfaz en lugar de la MapAlertDAO, utilizar de esta manera:

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

}

Ahora se puede pasar su MapAlertDAO a la AlertService.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=313898&siteId=1
Recomendado
Clasificación