java: valor de llamada de una variable en una clase desde una clase implementada de interfaz

Tengo una clase A en Java que establece un valor en alfa variable. La clase A llama a una función de una interfaz "MessageListener" como se muestra a continuación:

private List<MessageListener> mListeners;

for (MessageListener ml : this.mListeners) 
{
ml.messageTransferred(aMessage, from, this.host, isFirstDelivery);
}

Quiero pasar alfa a la función messageTransferred de la clase MessageStatsReport.java que implementa la interfaz mencionada anteriormente.

Si modifico los argumentos de la función messageTransferred, esto afecta a otras 12 clases desde la misma interfaz (MessageListener). Entonces, ¿cuál es la salida fácil? ¿Cómo puedo llamar a un valor variable (no estático) que se estableció en la clase A. ¿Alguna ayuda por favor?

Respuesta 1

Si A llama a la matriz de messageListeners, entonces, ¿cómo se supone que un MessageListener 'sabe' sobre alfa? Un método llamado no puede acceder a las propiedades o métodos del destinatario, ya que el tipo de destinatario puede cambiar. Tienes que pasar alfa si quieres que A sea consciente de ello.

Observe que está cambiando el contrato que MessageListener define al hacer que se ocupe de otro parámetro, si fuera posible incumplir el contrato de la interfaz sin que nadie lo supiera, bueno, eso no tendría ningún sentido (en la perspectiva de Java, algunos idiomas permiten esta).

Estás pasando un mensaje, ¿no debería ser alfa parte de ese mensaje? ¿en qué formato es aMessage?

Una solución es definir una interfaz que defina cómo se ve un mensaje real transferido. De manera simplificada, puede tener una messageinterfaz y tener una SimpleMessagey ComplicatedMessageque la implemente. aMessage puede ser de ese tipo y puede manejar el contenido en función de lo que definió la interfaz.

Respuesta: 2

Las compilaciones con Gradle 5.2.1 y la dependencia de Lombok 1.18.6 fallan con JDK 10. Parece que la anotación de Lombok no se está procesando adecuadamente. Sigo recibiendo el error "no se puede encontrar el símbolo" en ...

Sé que no es como debe ser y es totalmente incorrecto, pero las órdenes son órdenes, necesito hacer lo siguiente: El usuario accede al servlet con la tecla de acceso en los parámetros, de esta manera: http: / ...

Aprendí el marco Vert.x en Java. Estoy tratando de crear una API simple usando Router y Vert.x web. A continuación se muestra mi código: Mi clase principal - MainVerticle.java (Verticle): clase pública MainVerticle ...

Estoy tratando de ejecutar una Tarea Gradle haciendo doble clic en Eclipse, pero la tarea aparece atenuada y dice "No se pueden ejecutar tareas para las compilaciones incluidas" si hago clic con el botón derecho como puede ver en la imagen a continuación: ...