如何扩展最终的class?(反思,Javassist)

How to extend a final class?(Reflection, Javassist)

我有一个 .JAR 文件,里面有很多 类。第一,我需要的是最终的,所以我不能扩展它。有一种方法,我基本上必须扩展和修复,否则一切都会中断。我怎样才能做到这一点?我知道 Reflection 和 Javassist 可以用于此,但我不知道如何使用。任何其他工具也可以接受,只要它有效。

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

如果该 JAR 的许可证允许您这样做,我会建议一个不同的解决方案:反编译 那个 class;删除 final 关键字;并重建 class 和 JAR 文件。

这是解决您问题的唯一稳健方法。

Final classes 被标记为 final 是有原因的,所以理想情况下你不应该尝试修改 class。您应该考虑转向其他 API 或针对您的情况编写自己的解决方案 class。

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

public class YourClass {
    private FinalClass finalClass;

    public YourClass {
        finalClass = new FinalClass():
    }

    public void yourMethod() {
        finalClass.methodInFinalClass();
    }
}