如何扩展最终的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();
}
}
我有一个 .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();
}
}