Java中如何快速判断一个方法是否被重写

2023-11-22

如果我可以确定同一类中的另一个方法没有被覆盖,那么我可以对我的其中一个方法应用可能的优化。这只是一个轻微的优化,所以反射是不可能的。我是否应该创建一个受保护的方法来返回该方法是否被重写,以便子类可以使其返回 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.
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何快速判断一个方法是否被重写 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • 未找到 MessageSource 的 ResourceBundle [消息]:找不到基本名称消息的包

    在 applicationContext xml 中 我定义了 MessageSource 如下所示
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • Java 收集返回顶级项目的映射的嵌套流

    我有以下模型 class Item String name List
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 如何查看 Reader 是否处于 EOF?

    我的代码需要读入整个文件 目前我正在使用以下代码 BufferedReader r new BufferedReader new FileReader myFile while r ready String s r readLine do
  • 使用 StructureMap 进行单元测试

    我在 DI IOC 的 Web 项目中使用 StructureMap 它工作完美 但我不知道如何使用 StructureMap 编写单元测试 我应该像在 global asax 中那样在 AssemblyInitialize start S
  • UICollectionView 将手指拖动到单元格上以选择它们

    Using UICollectionView 是否可以通过将手指拖动到其中几个单元格上来选择多个单元格 例如 如果您将手指拖动到一行 6 上 然后向下拖动到下一行 它将选择所有这些 尝试了一些简单的事情 UISwipeGestureReco
  • Java VisualVM 在 OOME 上启用堆转储

    根据文档当应用程序遇到 OutOfMemoryException 时 可以自动进行堆转储 OutOfMemoryException 进程之后就从左侧菜单中消失 此功能在 VisualVM 中如何工作 Thanks C work temp g
  • DbSet.Cast() 错误:无法从非通用 DbSet 为“Entity”类型的对象创建 DbSet

    版本信息 我正在使用 C 4 5 Entity Framework 6 0 和 MEF 代码和单元测试 我创建了一个测试项目来解释这个问题 https skydrive live com redir resid E3C97EC293A340
  • 如何通过 HTTP 向受众发送 Firebase 通知

    在 Firebase 控制台中 我根据各种用户属性设置受众群体 现在可以通过控制台向不同的用户群体发送通知 有没有办法通过向 fcm 服务器发出 http 请求来执行相同的操作 to 字段应该有一个技巧 但我无法弄清楚 火力战士在这里 目前
  • AngularJS 中“getElementById”的替代方案

    检查这个PLNKR 我有一个带有 id 的列表myMenuList 这是一个加入script js显示Numer of li and UL width by scope mml angular element document getEle
  • JPA/hibernate 时间戳未保存在数据库/对象实体中

    我使用 javax persistence 作为我的实体对象 Mysql 作为数据库 我的实体对象有一个字段entryDate Column name ENTRYDATE private Date entryDate new Date 当我
  • 如何在Android Studio中将库导出到Jar?

    我已经下载了一些库源并想使用以下命令将其导出为 Jar 文件 安卓工作室 有没有办法使用 Android studio 导出到 jar 文件 edit 我想要导出为 jar 的库是一个 Android 库 它被称为 StandOut 可以从
  • UILabel 未更新

    抱歉这个基本问题 但这让我困扰了一段时间 我从 UITable 创建一个详细信息视图并尝试动态设置其标签 但它们没有更新 void tableView UITableView tableView didSelectRowAtIndexPat
  • 我应该将哪个数据库与 Node.js 一起使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我应该将哪个数据库与 No
  • 如何使用Python/PyQT/Win32获取Windows任务栏的高度

    我试图让我的 GUI 程序与 Windows 屏幕的右下角对齐 当任务栏没有隐藏时 我的程序就会站在任务栏的顶部 使用Python PyQT Win32时 我该如何 检查任务栏的自动隐藏功能是否开启 获取任务栏的高度 As 大卫 赫弗南提到
  • 当出现错误时,将用户重定向回表单后,如何重新填写用户填写的表单字段?

    简洁版本 我有一个包含 100 多个字段的表单 每个字段都有服务器端验证 我已成功提交表格并提交数据 当验证出现错误时 我什至将它们重定向回表单 并显示具体发生的错误 当他们重定向回 大型 表单时 所有数据都消失了 他们需要重新输入 我已经
  • 如何访问整个 AutoFac 容器以在 Orchard 中注册依赖项?

    这个问题非常简单 我想访问整体AutoFac容器 以便我可以在其中注册我的依赖项 remark 我不同意继承自IDependency因为在我的项目中 它会导致 两个程序集 的循环引用 我想要做的是使用密钥注册一个组件 并在其他程序集中使用相
  • 如何将 CMSampleBufferRef 转换为 NSData

    如何将 CMSampleBufferRef 转换为 NSData 我已经设法获取数据MPMediaItem通过遵循 Erik Aigner 的回答这个线程 但是数据的类型CMSampleBufferRef 我知道 CMSampleBuffe
  • Swift:无法在 if let 语句条件中使用数组过滤器

    假设我有一个用户名数组 let users Hello 1212 12 Bob Rob 我想得到第一个名字长度为2的用户 所以我过滤了数组并得到了第一个用户 if let selected users filter 0 characters
  • 使用 Chokidar 监视特定文件扩展名

    我正在寻找使用 nodejs Chokidar 观看文件夹 我只想监视 xml 文件的添加 删除 我是 Chokidar 的新手 无法弄清楚 我尝试设置 Chokidar 忽略以匹配以 xml 结尾的所有字符串 但看起来 Chokidar
  • C# = 为什么 Excel 进程没有结束?

    我有以下代码 private bool IsMousetrapFile string path logger Log validateFileMessage path Excel Application xlApp new Microsof
  • Objective C 中的模运算符

    来自 Objective C 编程 Kochan 程序5 8提示用户输入数字 然后显示数字 从该数字从最右边到最左边的数字 Program to reverse the digits of a number import
  • Java中如何快速判断一个方法是否被重写

    如果我可以确定同一类中的另一个方法没有被覆盖 那么我可以对我的其中一个方法应用可能的优化 这只是一个轻微的优化 所以反射是不可能的 我是否应该创建一个受保护的方法来返回该方法是否被重写 以便子类可以使其返回 true 我不会这样做 它违反了