我正在更新旧的 Java 应用程序以在现代操作系统上工作,但遇到了一个我无法弄清楚的错误。我对 Java 没有太多经验,但从我读过的内容来看,您不能像在 C++ 中那样将布尔值存储在整数(1 或 0)中。
这是错误所在的代码位:
public static double a(cr paramcr, int paramInt) {
double d = 0.0D;
int i = ++b;
if (b <= l.length()) {
if (paramInt < 0) {
int j = b; // <----------- defined again as an integer.
d = e();
if (e == true && d >= h && d + f - g >= 1.0D && d + f - g <= d) {
String str1 = String.valueOf((int)d);
d = d + f - g;
String str2 = String.valueOf((int)d);
l = a(j, l, str1, str2, i);
} else if (j == false) { // <---------------------------- error
if (((d < 1.0D || d > d) ? false : true) == false)
c = 7;
}
Run Code Online (Sandbox Code Playgroud)
带有错误消息:
The operator == is undefined for the argument type(s) int, boolean
Run Code Online (Sandbox Code Playgroud)
变量 j 在程序顶部被定义为一个静态布尔值,但后来在这个 'a' 类中被重新定义为一个整数。我注意到还有其他整数变量用于与此类中的真假语句进行比较,但它们都与某些条件进行比较以获得真假结果。这显然不是这里的情况,我的问题是我想不出这个程序如果是这样编写的,它过去会运行的方式。关于为什么会这样的任何想法或对我下一步行动的建议?
这些都没有任何文档或直观的变量名称,这无济于事。
在 Java 中,您不能将 anint视为boolean. 时期。
我收到了一些文件,有人告诉我其中包含源代码。它没。然后我被告知要反编译它。
您显然正在查看一些已从“.class”文件反编译的代码。不保证反编译会产生有效(可编译)的 Java 源代码。在这种情况下,它似乎没有。事实上,该代码中有一些线索暗示原始字节码被混淆了……故意使反编译器难以生成可读/有效的 Java 源代码。
(问题是使用相同的字节码来处理boolean和 整数类型int。在这种情况下,反编译器假定局部变量是int,并且无法确定它的假设是不正确的。更好的反编译器可能能够弄清楚......)
因此,您需要做的是弄清楚如何修改该(不是真正的 Java)代码以使其 1) 可编译,以及 2) 做正确的事情1。
这些都没有任何文档或直观的变量名称,这无济于事。
嗯......当你尝试使用反编译代码时会发生什么。所有局部变量名和注释(包括javadocs)都被编译器丢弃,反编译器无法重建它们。
另一种选择是回到应该给你源代码的人那里,并要求他们提供给你......真的!
1 - 这假设您可以弄清楚该方法真正应该做什么。我不认为我们可以帮助你。首先,可能需要阅读反汇编的字节码才能弄清楚代码的真正作用。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |