我有一个关于jar文件的困惑。我需要在枚举对象中添加一个项目。但是该对象位于 jar 文件中,状态为 final。我真的需要一个解决方案。你有什么想法吗?
例如:
public enum Resolution {
Unknown,
v_3840x2160_30p_16x9,
v_2704x2032_30p_4x3,
v_1920x1440_60p_4x3,
v_1920x1440_30p_4x3,
v_1920x1080_120p_16x9,
v_1920x1080_60p_16x9,
v_1920x1080_30p_16x9,
v_1280x960_120p_4x3,
v_1280x960_60p_4x3,
v_1280x720_240p_16x9,
v_840x480_120p_16x9;
private Resolution() {
}
}
方法是:
public Video setResolution(VideoResolution resolution, Callback success, CommandCallback<Error> fail) {
return this.sendCommand(new SetResolutionCommand(resolution, success, fail));
}
如果无法修改源,则无法修改。枚举通常是最终的,它们不能扩展。
但枚举也是类。因此,出于您的目的,您可以使用您选择的值定义自己的枚举,接受其他类型的枚举以将其转换为自己的类型的静态方法,以及向后转换新枚举值的非静态方法。
代码可能有点像这样:
enum NewEnum {
OLD_LIKE1, OLD_LIKE2, NEW1, NEW2;
public static NewEnum fromOld(OldEnum old)
{
switch (old)
{
case OldEnum.VAL1: return OLD_LIKE1;
case OldEnum.VAL2: return OLD_LIKE2;
}
}
public OldEnum toOld()
{
switch (this)
{
case OLD_LIKE1:
case NEW1: return OldEnum.VAL1;
case OLD_LIKE2:
case NEW2: return OldEnum.VAL2;
}
}
}
- 反编译相应的
.class
文件 - 修改生成的
.java
文件 - 编译修改后的源代码 将
- 原始
.class
文件替换为修改后的.class
文件(jar 只是标准化的 zip,您可以使用最常见的 zip 编辑器对其进行编辑(