当前位置: 首页 > 面试题库 >

当一个类也扩展了另一个类时,如何使它可扩展?

邓仲卿
2023-03-14
问题内容

我正在学习Java,并且希望将自己的课堂变成可观察的课堂。

但是我已经有了它扩展了另一个类。

我该怎么办?


问题答案:

我建议避免Observable完全使用该类,而应 定义事件特定的侦听器和相应的事件定义
。然后在您的类中定义一个侦听器列表,以及添加和删除侦听器以及向其传播事件的方法(请参见下文)。

Observable强制您使用它java.lang.Object来表示事件,然后使用来检查事件类型instanceof,这是一种丑陋的非OO方法,并使代码更难以理解。如果查看javax.swing包中的类,您会发现它们完全避免使用Observer/,Observable并且使用类似于以下的方法

事件定义

public class MyChangeEvent extends EventObject {
  // This event definition is stateless but you could always
  // add other information here.
  public MyChangeEvent(Object source) {
    super(source);
  }
}

侦听器定义

public interface MyChangeListener {
  public void changeEventReceived(MyChangeEvent evt);
}

类定义

public class MyClass {
  // Use CopyOnWriteArrayList to avoid ConcurrentModificationExceptions if a
  // listener attempts to remove itself during event notification.
  private final CopyOnWriteArrayList<MyChangeListener> listeners;

  public class MyClass() {
    this.listeners = new CopyOnWriteArrayList<MyChangeListener>();
  }

  public void addMyChangeListener(MyChangeListener l) {
    this.listeners.add(l);
  }

  public void removeMyChangeListener(MyChangeListener l) {
    this.listeners.remove(l);
  }

  // Event firing method.  Called internally by other class methods.
  protected void fireChangeEvent() {
    MyChangeEvent evt = new MyChangeEvent(this);

    for (MyChangeListener l : listeners) {
      l.changeEventReceived(evt);
    }
  }
}


 类似资料:
  • 问题内容: 如何测试是否是的子类? 问题答案: 您是否在寻找:

  • 问题内容: 在Java中,我该如何确定类扩展了哪些类? 会做我需要的吗? 问题答案: 该方法将失败,因为它的直接超类不是,而是。宁可使用。

  • 使用java和testNG,我在两个不同的类test1.class和test2.class中有两个测试,还有一个包含大多数方法的base.class:

  • 我有一个泛型类型K,我想验证K是否实现了接口可比性。这是我的代码: 但是代码不起作用。我不想将所有K限制为实现可比性。我已经有了另一个TreeMapVector相似度类。如果K实现了接口可比性,我将使用TreeMapVector相似度类返回结果。 你认为我如何能解决这个问题?谢了。

  • 我有一个抽象类B,它扩展了另一个抽象类A。在抽象类A中,我有一个受保护的方法转换。我想测试方法foo,它从没有实现的基类调用方法convert。如果无法更改转换方法签名,如何模拟方法转换。 我使用Mockito.spy()调用真正的方法,但转换方法是不可用的嘲弄(通过Mockito.when(...)。 告诉我如何测试方法foo。

  • 你好,有人知道如何发现扩展< code>ArrayBlockingQueue的类吗?例如,我想监视下面的< code>MyBufferQueue类 在属于java库的< code>ArrayBlockingQueue类中,有这样一个方法: 我遇到的问题是,当我监视类< code>MyBufferQueue时,以及在测试期间访问方法< code > ArrayBlockingQueue . put(