尝试JAD(http://www.varaneckas.com/jad).
您显示的有问题的代码等效于以下内容:
1) Class class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder;
2) ClassLoader loader = class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder.getClassLoader();
3) Class type = Class.forName("org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl", true, loader);
4) Constructor ctor = type.getConstructor(Class.class);
5) Object obj = ctor.newInstance(TypeSystemHolder.class);
6) SchemaTypeSystem result = (SchemaTypeSystem) obj;
7) return result;
您遇到问题的部分是第1行,它代表一个局部变量或一个字段(可能是静态的). Java编译器将表达式’TypeSystemHolder.class’转换为对getClass的调用,并将结果存储在静态字段中.该初始化在引用“ TypeSystemHolder.class”的每个类中发生一次,并且编译器使用字段访问替换使用此表达式的每个调用站点.
大多数反编译器无法将此惯用法转换回对“ TypeSystemHolder.class”的原始调用,但JAD可以很好地处理此问题.此外,还有一个插件将JAD(和其他)集成到Eclipse(http://jadclipse.sourceforge.net)中.
不幸的是,反编译器无法处理编译器生成的每个代码序列,因此始终需要进行一些手动重写.例如,Java编译器可能会为一个异常处理块生成与另一个异常处理块的代码重叠的代码.反编译器无法将其分成两个捕获块.在这种情况下,通常会看到goto语句在整个代码中杂乱无章(无效的Java),或者反编译器只是放弃了该方法.
此外,您是正确的,这是生成的代码.具体来说,它来自XmlBeans编译器,该编译器分析xn XML Schema并为Java生成绑定类.允许对符合该模式的XML文档进行序列化和反序列化.如果您有权访问模式,最好将XmlBeans合并到您的构建中,而不是反编译这些类.