【发布时间】:2021-05-21 08:39:39
【问题描述】:
我不是一个经验丰富的程序员,我对 java 知之甚少。
我有一个用 java1.5 编译的 10 年前的小型 java 软件。显然我没有源代码。 这个软件有一个小bug,所以我用了一个java反编译器,发现了这个bug。 解决方案非常简单,但我在重新编译类时遇到了困难。我正在使用java1.5.0_12重新编译。
不幸的是,编译器似乎在代码中遇到了一些错误。
it/cp/pacm/dbsync/Synchronizer.java:234: possible loss of precision
found : int
required: char
/* 287 */ c = Integer.parseInt(strLdapPort);
代码是
/* */ char c;
...
/* 287 */ c = Integer.parseInt(strLdapPort);
我通过强制转换解决了这个问题。
/* 287 */ c = (char)Integer.parseInt(strLdapPort);
但还有一个我无法解决的问题
# javac -cp ../software.jar it/cp/pacm/dbsync/Synchronizer.java
software.jar 是整个包
it/cp/pacm/dbsync/Synchronizer.java:415: cannot find symbol
symbol : class E
location: class it.cp.pacm.dbsync.Synchronizer
/* 497 */ for (Iterator<E> iterator = removedEntries.keySet().iterator(); iterator.hasNext(); ) {
^
it/cp/pacm/dbsync/Synchronizer.java:463: incompatible types
found : java.util.Iterator<java.lang.Object>
required: java.util.Iterator<java.lang.String>
/* 552 */ for (Iterator<String> iterator1 = newAttributes.keySet().iterator(); iterator1.hasNext(); ) {
^
it/cp/pacm/dbsync/Synchronizer.java:475: incompatible types
found : java.util.Iterator<java.lang.Object>
required: java.util.Iterator<java.lang.String>
/* 571 */ for (Iterator<String> i = oldAttributes.keySet().iterator(); i.hasNext(); ) {
^
it/cp/pacm/dbsync/Synchronizer.java:673: unexpected type
found : byte
required: reference
/* 816 */ Arrays.sort(values, (Comparator<? super byte>)new ByteArrayComparator());
^
Note: it/cp/pacm/dbsync/Synchronizer.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
我不知道E 类是在哪里定义的。
是否有任何选项可以忽略这些错误?
使用 jdk1.5.0_11 无法开始构建:
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
该目录还包含一些其他未知的类文件
Synchronizer$DEFAULTS.class
Synchronizer$DNOrder.class
Synchronizer$EntryOrder.class
Synchronizer$SETTINGS.class
Synchronizer.class
谢谢
【问题讨论】:
标签: java decompiler rebuild recompile