gpt4 book ai didi

java - Java 类可以在运行时向自身添加方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:11 25 4
gpt4 key购买 nike

类是否可以在运行时向自身添加方法(例如从 static block ),以便如果有人在此类上执行反射,他们会看到新方法,即使它没有在编译时定义?

背景:

按照惯例,我使用的框架需要定义具有 doAction(...) 方法的 Action 类。框架在运行时检查这些类,以查看其 doAction() 方法中可用的参数类型。例如:doAction(字符串 a, 整数 b)

我希望每个类都能够在检查时及时以编程方式生成具有各种参数的 doAction() 方法。方法体可以为空。

最佳答案

这并不简单。一旦类被类加载器加载,就无法更改加载类的方法。当请求一个类时,类加载器将加载它并链接它。并且(使用 Java)无法更改链接的代码或添加/删除方法。

我想到的唯一技巧是使用类加载器。如果我们删除自定义类加载器,那么该类加载器加载的类也应该被删除或无法访问。我想到的想法是

  1. 实现一个自定义类加载器
  2. 使用自定义类加载器加载动态
  3. 如果我们有此类的更新版本,
  4. 删除自定义类加载器并
  5. 使用自定义类加载器的新实例加载此类的新版本

我将其作为思考的食粮,无法证明这是否会带来解决方案或者我们是否有陷阱。

作为问题的简单答案:不,我们不能像通过反射更改字段的内容那样更改加载的类。 (我们也无法添加或删除字段)。

关于java - Java 类可以在运行时向自身添加方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57077872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com