如何扩展最后一个类?(反射,Javassist)

如何扩展最后一个类?(反射,Javassist),java,reflection,bytecode,javassist,Java,Reflection,Bytecode,Javassist,我有一个.JAR文件,它有很多类。第一,我需要的是设置为最终的,所以我不能扩展它。有一种方法,我基本上必须扩展和修复,否则一切都会中断。我该怎么做?我知道反射和Javassist可以用于此,但我不知道如何使用。任何其他工具都是可以接受的,只要它有效。您不能使用反射来修改现有的类定义 如果JAR的许可证允许,我会建议一个不同的解决方案:反编译那个类;删除最后一个关键字;并重建类和JAR文件 这是解决问题的唯一可靠方法。最终类被标记为最终类是有原因的,因此理想情况下,您不应该尝试修改该类。您应该考虑

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

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

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


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

最终类被标记为最终类是有原因的,因此理想情况下,您不应该尝试修改该类。您应该考虑移至其他API,或者为您的案例编写自己的解决方案类。 例如,您可以在最终类周围使用包装器并扩展功能,例如:

public class YourClass {
    private FinalClass finalClass;

    public YourClass {
        finalClass = new FinalClass():
    }

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

你试过哪一个?为了记录在案-我们不是在谈论开源,在那里你可以简单地下载源代码?使用JD-GUI,Luyten。实际上,这有点像白帽黑客:)另一个想法:你知道这个类的实现吗?我的意思是:是否有机会用您自己的代码完全替换它?或者那个类中的“真实”函数对你来说重要吗?仔细想想。但在那个类中有一个签名算法,我想复制粘贴到我的代码中,但反编译器把它搞砸了。现在我仔细看了一下,我认为我的问题完全不同了——我需要从该类中删除一个方法,它应该可以正常工作。因为现在我得到了一些随机类的NoClassDefFoundError。我想我会创造一个新的StackOverflow职位,它会太过了-topic@Gintas_只需使用Krakatau反汇编程序。它可以处理任何事情,甚至是不可能反编译的类。如果你觉得勇敢,你也可以使用十六进制编辑器。删除最后一个标志是一个固定偏移量的单位翻转,所以在十六进制编辑器中很容易做到。看一看,没有例子。我知道正常使用Java是不可能的,但我仍然需要完成它