gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:24:21 24 4
gpt4 key购买 nike

一个类可以在运行时给自己添加一个方法吗(比如从一个 static block 中),这样如果有人在这个类上执行反射,他们会看到新方法,即使它不是在编译时定义的?

背景:

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

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

最佳答案

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

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

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

我将其作为深思熟虑的食物,无法证明这是否会导致解决方案或我们是否存在陷阱。

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

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

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