【问题标题】:java: calling value of a variable in one class from an implemented class of interfacejava:从实现的接口类调用一个类中变量的值
【发布时间】:2012-09-03 19:00:40
【问题描述】:

我在 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 函数的参数,这会影响来自同一接口 (MessageListener) 的 12 个其他类。那么什么是简单的出路呢?如何调用在 A 类中设置的(非静态)变量值。请帮忙?

【问题讨论】:

  • A 是 MessageListener 还是 A 使用了一个使用 MessageListener 数组的函数?
  • 是的,一个使用MessageListener数组的函数来调用实现messageListener的类的函数
  • 上面代码写的类本身就是一个抽象类:public abstract class MessageRouter {

标签: java class interface


【解决方案1】:

如果 A 调用 messageListeners 数组,那么任何 MessageListener 应该如何“知道”关于 alpha 的信息?被调用的方法不能访问其内部被调用者的属性或方法,因为被调用者的类型可能会改变。如果你想让 A 知道它,你必须传递 alpha。

请注意,您正在更改 MessageListener 通过处理另一个参数定义的 合同,如果有可能在没有人知道的情况下违反接口的合同,那么这不会造成任何影响感觉(从 java 的角度来看,某些语言确实允许这样做)。

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

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

【讨论】:

  • 这正是我在收到您的回复之前开始做的事情,通过消息属性传递 alpha。谢谢。
【解决方案2】:

下一个方法

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

现在,当您想将 alpha 传递给方法时,请使用

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

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

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

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多