我在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类中设置的(非静态)变量值。请帮忙吗?
答案 0 :(得分:1)
如果A调用了messageListener数组,那么任何MessageListener应该如何“知道”alpha?被调用的方法无法访问其内部的被调用者的属性或方法,因为被调用者的类型可能会发生变化。如果你想要A知道它,你必须传递alpha。
请注意,您正在更改MessageListener定义的合同,方法是让它处理另一个参数,如果有可能在没有人知道的情况下违反接口的合同,那么就不会感觉(在java的角度来看,有些语言允许这样做)。
您正在传递消息,不应该将alpha作为该消息的一部分吗? aMessage的格式是什么?
一种解决方案是定义一个接口,定义实际消息传输的内容。以简化的方式,您可以拥有message
界面并拥有实现它的SimpleMessage
和ComplicatedMessage
。 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);