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

如何快速确定Java中是否重写了方法

诸葛彦
2023-03-14
问题内容

如果可以确定未重写同一类中的另一个方法,则可以对我的方法之一进行优化。这只是一个很小的优化,因此反射是不可能的。我是否应该只创建一个受保护的方法,该方法返回是否覆盖了所讨论的方法,以便子类可以使其返回true?


问题答案:

我不会的 它违反了封装,并且在实现者不知道的情况下更改了类应该执行的约定。

但是,如果必须这样做,最好的方法是调用

class.getMethod("myMethod").getDeclaringClass();

如果返回的类是您自己的,则不会被覆盖;如果还有其他内容,则该子类已覆盖它。是的,这只是反思,但仍然很便宜。

不过,我确实喜欢您的保护方法。看起来像这样:

public class ExpensiveStrategy {
  public void expensiveMethod() {
    // ...
    if (employOptimization()) {
      // take a shortcut
    }
  }

  protected boolean employOptimization() {
    return false;
  }
}

public class TargetedStrategy extends ExpensiveStrategy {
  @Override
  protected boolean employOptimization() {
    return true; // Now we can shortcut ExpensiveStrategy.
  }
}


 类似资料:
  • 问题内容: 我需要在我的没有超类的对象中实现一个深层克隆。 处理超类(即)引发的检查的最佳方法是什么? 一位同事建议我按以下方式处理: 对我来说,这似乎是一个不错的解决方案,但我想将其扔给StackOverflow社区,以查看是否有我可以提供的其他见解。 问题答案: 你绝对必须使用吗?大多数人都同意是坏的。 如果你已经阅读了我书中有关克隆的内容,尤其是你在两行之间阅读的话,你会知道我认为它clon

  • 问题内容: 我最喜欢的Linux工具之一是lsof-真正的瑞士军刀! 今天,我发现自己想知道WinXP系统上的哪些程序打开了特定文件。有与lsof等效的工具吗?此外,有问题的文件是通过网络共享进行的,因此我不确定是否会使问题复杂化。 问题答案: 使用Sysinternals Suite中的Process Explorer,Find Handle或DLL函数将让您搜索打开该文件的过程。

  • 问题内容: 我正在寻找确定一个值是否为完美平方(即其平方根是另一个整数)的最快方法: 我已经通过使用内置Math.sqrt() 函数完成了简单的方法,但是我想知道是否有一种方法可以通过将自己限制为仅整数域来更快地完成操作。 维护查询表是不切实际的(因为大约2 31.5整数的平方小于2 63)。 这是我现在要做的非常简单明了的方法: 问题答案: 我想出一种方法,至少在我的CPU(x86)和编程语言(

  • 我知道,在Java中的事件驱动程序中,可以找出是什么对象导致了事件(例如,选择了,因此会发生特定的操作)。我的问题是,如果在一个按钮组中有两个,两个按钮都添加了动作侦听器,并且您一直在从一个按钮到另一个按钮中进行选择,那么是否有可能找到以前选择的?换句话说,如果我选择了另一个,在选择当前之前,是否可以编写代码来确定之前选择了哪个? 编辑:我会更具体。我正在创建一个“虚构”的餐厅程序。在其中,我列出

  • 问题内容: 有没有办法找出一个类是否已重写和? 问题答案: 您可以使用反射 如果将注释掉,如果没有注释,将打印。 将返回实现该对象的类的对象。 请注意 ,仅适用于方法。但是,在这种情况下,和必须。取决于其他算法,该算法将需要更改。