如何扩展最后一堂课?(反思,Javassist)

时间:2016-09-19 17:46:56

标签: java reflection bytecode javassist

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

3 个答案:

答案 0 :(得分:2)

您无法使用反射来修改现有的类定义。

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

这是解决问题的唯一强大方式。

答案 1 :(得分:1)

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

public class YourClass {
    private FinalClass finalClass;

    public YourClass {
        finalClass = new FinalClass():
    }

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

答案 2 :(得分:0)

由于某种原因,最终的课程被标记为最终成绩,所以理想情况下,您不应该尝试修改课程。您应该考虑转移到其他API或为您的案例编写自己的解决方案类。