java:从实现的接口类调用一个类中的变量的值

时间:2012-09-03 19:00:41

标签: java class interface

我在java中有一个A类,它在变量alpha中设置一个值。 A类调用接口函数" MessageListener"如下:

private List<MessageListener> mListeners;

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

我想将alpha传递给实现上述接口的MessageStatsReport.java类的messageTransferred函数。

如果我修改了messageTransferred函数的参数,则会影响来自同一接口的其他12个类(MessageListener)。那么简单的出路是什么?如何调用在A类中设置的(非静态)变量值。请帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果A调用了messageListener数组,那么任何MessageListener应该如何“知道”alpha?被调用的方法无法访问其内部的被调用者的属性或方法,因为被调用者的类型可能会发生变化。如果你想要A知道它,你必须传递alpha。

请注意,您正在更改MessageListener定义的合同,方法是让它处理另一个参数,如果有可能在没有人知道的情况下违反接口的合同,那么就不会感觉(在java的角度来看,有些语言允许这样做)。

您正在传递消息,不应该将alpha作为该消息的一部分吗? aMessage的格式是什么?

一种解决方案是定义一个接口,定义实际消息传输的内容。以简化的方式,您可以拥有message界面并拥有实现它的SimpleMessageComplicatedMessage。 aMessage可以是该类型,您可以根据接口定义的内容处理内容。

答案 1 :(得分:1)

下一步制作方法

messageTransferred(aMessage, from, this.host, isFirstDelivery, alpha)  
{   
   if (alpha != null)  
   {
   // ...  
}  

现在,当你想要将alfpha传递给方法时,请使用

messageTransferred(aMessage, from, this.host, isFirstDelivery, alpha);  

当您不想使用alpha时,请传递null而不是alpha

messageTransferred(aMessage, from, this.host, isFirstDelivery, null);