当前位置: 首页 > 知识库问答 >
问题:

如何扩展最终类?(反射、Jav辅助)

田鹤轩
2023-03-14

我有一个. JAR文件,里面有很多类。第一,我需要的设置为final,所以我不能扩展它。有一种方法,我基本上必须扩展和修复,否则一切都会崩溃。我该怎么做呢?我知道反射和Javassist可以用来做这件事,但是我不知道怎么做。其他任何工具也是可以接受的,只要能用就行。

共有3个答案

堵远航
2023-03-14

最终类被标记为最终是有原因的,因此理想情况下您不应该尝试修改类。您应该考虑迁移到其他API或为您的案例编写自己的解决方案类。

汪泓
2023-03-14

不能使用反射来修改现有的类定义。

如果该JAR的许可证允许您这样做,我建议使用不同的解决方案:反编译该类;删除最终关键字;重建类和JAR文件。

这是解决问题的唯一可靠方法。

储嘉悦
2023-03-14

例如,您可以在 Final 类周围使用包装器并扩展功能,例如:

public class YourClass {
    private FinalClass finalClass;

    public YourClass {
        finalClass = new FinalClass():
    }

    public void yourMethod() {
        finalClass.methodInFinalClass();
    }
}
 类似资料:
  • 问题内容: 我有两个字符串: 我通过反思上课 我想要aClass扩展b,例如: 如何实现呢? 如何获得okClass? 谢谢! 问题答案: 除了使用仅通过接口工作的JDK动态代理外,您还可以使用CGLIB或javassist在运行时扩展类。

  • 问题内容: 这实际上是我现在面临的问题。我有一个类,可以说该类定义了一个返回实例的方法。该类在内部定义并声明。我想要做的就是定义一个类扩展,但我也想对与加入我自己的功能(方法,属性等)。我也想回来。 问题是最终的。这是我想做的事的例证: 我想做的是: 我该如何实现? [编辑]我正在向我的问题添加更多详细信息。我实际上是在为Jenkins开发一个插件,经过搜索,我意识到有一个插件提供了我想做的基本功

  • 关于MapStruct的问题。我有这样的情况,我从基实体扩展类,但不知道如何映射它。这是我的箱子。 BaseEntity: 基础: 没有显示错误,在映射器实现(生成的代码)中没有该ID的映射:

  • 本文向大家介绍C#中反射和扩展方法如何运用,包括了C#中反射和扩展方法如何运用的使用技巧和注意事项,需要的朋友参考一下 前段时间做了一个练手的小项目,名叫Book_Bar,用来卖书的,采用的是三层架构,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL层中各个类中有一个方法比较常用,那就是RowToClass ,顾名思义,也就是将DataTable 中的数据封装到Models

  • 在可能的副本上: 此线程不是在询问如何扩展类。它问为什么一个声明为的类可能会扩展另一个类。 从该线程: <code>final</code>类只是一个不能扩展的类。 但是,我有一个帮助程序类,我声明它是,并了另一个类: Eclipse没有检测到任何错误。我已经测试了这个类,并且PDF是成功生成的,没有错误。 为什么我能够课程,而理论上我不应该延长? (如果重要的话,我正在使用Java7。)

  • 当我试图创建一个包含方法的映射器以从同一个源映射到两个类型时,我会得到一个不明确的映射方法错误,即使方法签名(至少返回类型)是不同的。我是不是走错路了?我不能为使用相同源代码的DTO使用子类吗? 编辑:为了方便起见,我使用mapstruct-jdk8:1.1.0.final 编辑2:下面的例子只是一个例子,在我的头顶上。当我实际使用代码时,它起作用了。事实证明,我的问题是示例中没有包含的东西。当我