如何处理未使用的@Override方法?

时间:2018-08-23 13:18:09

标签: java coding-style

如您所知,实现接口时必须重写某些方法。以我为例,经常会发生我不得不覆盖不需要的方法的情况。结果,我的类挤满了空的@Override方法。

示例:

@Override
public void keyPressed(KeyEvent ke) {
    // TODO Auto-generated method stub
    if(ke.getKeyCode() == KeyEvent.VK_END) {
        System.exit(0);
    }
}

@Override
public void keyReleased(KeyEvent arg0) {}

@Override
public void keyTyped(KeyEvent arg0) {}

在此示例中,我想通过按键盘上的“结束”键来关闭程序。一旦实现所需的“ KeyListener”接口,就必须覆盖方法“ keyReleased”和“ keyTyped”。 但是,由于我不需要这两个方法,因此它们在我的课程中仍然为空。

示例注释:

当然,这三行代码不是什么大问题。 “ MouseListener”接口的实现看上去将完全不同,其中几乎两倍的数字将必须被覆盖。 更不用说实现多个接口时的样子了。

问题:

  1. 通过空方法,整个代码给人留下了不洁的印象。
  2. 将代码传递给第三方时会感到困惑。
  3. 在许多地方,建议删除未使用的代码。在我的情况下,这些空的@Override方法将是未使用的。 (例如here

清理这些空的@Override方法并使我的代码看起来更“干净”的最佳方法是什么?

修改

不要为我的例子感到困惑。问题本身通常是关于未使用的覆盖方法的,而不是我的示例中的问题。很抱歉,如果我不清楚

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决此问题。 我认为首选的方法是使用所有方法的默认实现创建一个抽象类。除了实现您的接口,您还可以扩展您的抽象类并仅覆盖所需的方法:

给出您的界面:

await

您创建实现此接口并为所有方法提供默认实现的抽象类:

interface FooBarBaz {
    void foo();
    int bar();
    String baz();
}

然后您可以像这样在代码中使用它,并且仅覆盖所需的方法:

abstract class AbstractFooBarBaz implements FooBarBaz {
     @Override
     public void foo() {
         // NOP by default
     }

     @Override
     public int bar() {
         return 0; // 0 by default
     }

     @Override
     public String baz() {
         return null; // null by default
     }
 }

另一种解决方案是在界面中使用默认方法。但是,这不是一种好的做法,因为接口应该定义行为,而不是实现。毕竟,如果它是第三方接口,您甚至可能无法做到这一点。