【问题标题】:Remove methods or fields from class that extends swing component从扩展摆动组件的类中删除方法或字段
【发布时间】:2014-02-03 09:18:20
【问题描述】:

出于好奇...

假设我们有一个扩展 Jpanel 的类。而且我们不需要所有的 Jpanel 方法。例如,我们不会在新类上使用任何 ToolTipText,因此我们不需要 setToolTipText 方法。 我的问题是:是否可以从新类中删除我们不需要的方法?如果是,是否对执行速度有任何影响(可能是更快的构建)?

【问题讨论】:

    标签: java swing inheritance


    【解决方案1】:

    是否可以从新类中删除我们不需要的方法?

    • 是的,这是可能的,但请注意,将任何 Listener 添加到普通 JPanel(任何方法都已删除)和将 Listener 添加到 JPanel 之间存在差异,其中Listener 被移除,通知器被修改

    • 找不到真正的原因,可能会适得其反,但如果您想修改内置的侦听器、通知器、加速器,情况就会大不相同

    • API 中实现的所有方法addXxxXxx 都可以删除(对JPanel 有效,不能对所有化合物JComponents 有效)

    如果是,是否对执行速度有任何影响(更快 建设可能)?

    • 我对此表示怀疑,一切都取决于从侦听器强制执行的方法(您的自定义设置、您的代码)

    【讨论】:

      【解决方案2】:

      是否可以从新类中删除我们不需要的方法?

      如果你想对类的用户隐藏部分界面,那么你不应该使用inheritance。请记住,inheritance 用于is-a 关系,如果子类A JPanel,那么它肯定对ToolTip 有用。您应该使用Composition,它允许您屏蔽部分组合对象方法。

      示例

      public class A
      {
          public void wantedMethod() {}
      
          public void unwantedMethod() {}
      }
      

      如果我想从我的子类中隐藏unwantedMethod,我可以这样做:

      public class B
      {
          private A a;
      
          public void wantedMethod() {
              a.wantedMethod();
          }
      }
      

      这将不允许unwantedMethod 逃到B 类的interface

      【讨论】:

      • 很遗憾,GUI 代码教程像没人管的那样过度使用继承。
      • 他们当然会。 inheritance 有它的用途,但是当您处理与 Java 中的 Component 类型一样大的类时,您确实需要考虑另一种方法。
      【解决方案3】:

      如果从不调用该方法,则类的执行速度没有区别。删除方法会减少编译时间,但可以忽略不计。

      【讨论】:

        【解决方案4】:

        不可能,方法的数量不影响执行速度。从理论上讲,加载一个方法较少的类不会花费那么长时间,但它只是几个字节,因此只有几微秒,无论如何,方法首先就在那里。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-22
          • 2016-12-16
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多