重写方法上的 Java Class.getMethods() 行为

2023-11-25

在使用 Java 反射编写一个简单的 JSON 序列化程序时,我对 Class.getMethods() 的行为感到措手不及。如果重写方法的返回类型扩展了被重写方法的返回类型,则 Java Class.getMethods() 似乎会返回重写方法和被重写方法。
例如给定接口:

static interface A {
  A x();
  A y();
}
static interface B extends A {
  B x();
  A y();
}

A.class.getMethods()按预期返回和两个方法的数组 然而B.class.getMethods()返回一个包含 3 个方法的数组(对我来说这有点违反直觉)。 3 个中,1 对应于y()正如预期的那样,但剩下的两个对应于原来的x()带返回类型A和最重要的版本x()带返回类型B分别。这让我觉得有点奇怪,但原来的x()在数组中,因为它无法从任何地方访问。不管怎样,我的问题是这样的:
是否有一种简单的方法可以获取类方法的最专业版本的列表,而无需手动检查覆盖的方法并将其过滤掉?


我的理解是,如果你过滤掉以下方法isBridge()回报true,不需要的方法应该消失。

它是 Java 如何实现协变返回类型的产物(桥接方法也用于泛型,但这似乎与您的用例无关)。

edit有趣的是,虽然这适用于类,但它似乎不适用于接口。全部三种方法B被标记为非桥接和非合成。但是,如果我创建一个非抽象类C实施B, its A x()被标记为桥接和合成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写方法上的 Java Class.getMethods() 行为 的相关文章

随机推荐

  • 将文本文件作为 clob 加载到数据库

    将文本文件作为 clob 加载到数据库时出现问题 Oracle 版本 Oracle Database 11g EE 版本 11 2 0 2 0 NLS LANG RUSSIAN RUSSIA CL8MSWIN1251 NLS CHARACT
  • 匿名类型的 IQueryable

    我使用 EntityFramework 使用匿名类型查询和返回部分数据 目前我正在使用IQueryable
  • MKPointAnnotations 快速触摸事件

    我想知道是否有人可以告诉我如何触摸map形式为MKPointAnnotations 我想点击pin on the map并通过返回来转到另一个视图variables of the pin我已经预设了 谁能向我解释一下这件事Swift tha
  • 使 .NET WebBrowser 不与 IE 或其他实例共享 cookie

    由于 C 中的 WebBrowser 与包括 IE 在内的所有其他 WebBrowser 实例共享 cookie 我希望 WebBrowser 拥有自己的 cookie 容器 该容器不共享以前在 IE 或其他实例中创建的任何 cookie
  • 如何分配页大小对齐的内存?

    我需要分配应该与页面大小对齐的内存 我需要将这段记忆传递给ASM计算所有数据块的异或的代码 我需要这样做malloc 您应该使用一些函数来实现此目的 如果出于某种原因不能 那么通常完成的方法是将块大小添加到分配大小 然后使用整数数学技巧对指
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException

    我尝试通过 Solrj 查询 Solr 这是我的代码 public class ReadFromSolr public static void main String args throws MalformedURLException So
  • 如何使用 HTMLAgilityPack 修复 html 标签(缺少 标签)

    我有一个 html div h1 hello Hi h1 div div hi div 所需输出 div h1 hello h1 div div p hi p div 使用 HTML 敏捷包是否可以解决此类类似的缺少结束和开始标签的问题 图
  • 如何在 postgresql 中进行透视

    我有如下表 我想改造它们 year month week type count 2021 1 1 A 5 2021 1 1 B 6 2021 1 1 C 7 2021 1 2 A 0 2021 1 2 B 8 2021 1 2 C 9 我想
  • SQL Server 字符串与 Null 的连接

    我正在跨字段创建一个计算列 其中一些字段可能为空 问题是 如果这些字段中的任何一个为空 则整个计算列也将为空 我从 Microsoft 文档中了解到 这是预期的 可以通过设置 SET CONCAT NULL YIELDS NULL 关闭 但
  • C# 从 URI 字符串获取文件名

    我有这个方法可以从字符串 URI 中获取文件名 我能做些什么来使它更强大 private string GetFileName string hrefLink string parts hrefLink Split string fileN
  • 为什么 .* 不消耗此 Perl 正则表达式中的整个字符串?

    为什么第一个打印语句没有输出我期望的结果 first This is a test string sec This is a test string 由于 和 都是贪婪的 为什么第一个匹配中的内部 即 内部的 不消耗整个字符串 use st
  • “Decimal”类型的对象不可 JSON 序列化

    由于客户函数错误 Lambda 执行失败 状态为 200 Decimal 类型的对象不可 JSON 序列化 我在以下链接中浏览了所有现有的解决方案 但没有任何对我有用 我究竟做错了什么 Python JSON 序列化 Decimal 对象
  • python asyncio如何读取StdIn并写入StdOut?

    我需要异步读取 StdIn 以获取消息 由 r n 终止的 json 并在处理异步后将更新的消息写入 StdOut 目前我正在同步执行此操作 如下所示 class SyncIOStdInOut def write self payload
  • 在 Linux 上使用 mkdir 作为基于文件的锁定是一个好习惯吗?

    我想在 Linux 上的 perl 程序中快速实现某种锁定 它可以在不同进程之间共享 所以我用了mkdir作为原子操作 它返回1如果该目录不存在并且0如果是的话 我删除了关键部分之后的目录 现在 有人向我指出 这通常不是一个好的做法 独立于
  • Apple Watch OS 2 上是否可以在没有伴随声音的情况下触发触觉反馈

    假设用户没有将手表声音静音 Apple Watch 应用程序是否可以在没有伴随声音的情况下触发触觉反馈 即振动 这与接收由手表自动处理的通知不同 在本例中 我使用手表应用程序调用触觉反馈 像这样 WKInterfaceDevice curr
  • 在WebAPI中绑定抽象动作参数

    我遇到的情况是 我需要将传入的 HTTP POST 请求与正文中的数据绑定到具体类型 具体取决于ProductType数据中的分母 这是我的 Web API 2 操作方法 HttpPost Route public HttpResponse
  • Perl:为什么在循环内声明(我的)变量速度较慢?

    从口译员的视角来看 以下程序之间有什么区别 usr bin perl w use strict for 1 10000000 my jimmy 2 and usr bin perl w use strict my jimmy for 1 1
  • iOS 未收到通过 API 发送的 Firebase 推送通知

    我正在使用 Google 的 Firebase Cloud Messaging 将推送通知发送到我的 iOS 和 Android 应用程序 通过云消息控制台发送的推送通知按预期工作 但是当我通过 API 发送推送通知时 iOS 应用程序仅在
  • jquery:在图像后淡入淡出

    我有一个包含 10 张图像的页面 我想在图像下载后将它们逐个淡入淡出 如何检测图像已加载并准备好显示 我应该循环加载加载的图像 fadeIn 并一旦 fadeIn 等待下一个加载吗 只需在图像上使用 load 事件即可 例如 some im
  • 重写方法上的 Java Class.getMethods() 行为

    在使用 Java 反射编写一个简单的 JSON 序列化程序时 我对 Class getMethods 的行为感到措手不及 如果重写方法的返回类型扩展了被重写方法的返回类型 则 Java Class getMethods 似乎会返回重写方法和