如何在 final 中声明的枚举对象中添加项目并压缩到 jar



我有一个关于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;
    }
  }
}
  1. 反编译相应的.class文件
  2. 修改生成的.java文件
  3. 编译修改后的源代码
  4. 原始.class文件替换为修改后的.class文件(jar 只是标准化的 zip,您可以使用最常见的 zip 编辑器对其进行编辑(

最新更新