考虑这个(恕我直言)简单的例子:

public class DecompilerTest {

public static void main(String[] args) {

Object s1 = "The",s2 = "answer";

doPrint((Object) "You should know:");

for (int i = 0; i < 2; i++) {

doPrint(s1);

doPrint(s2);

s1 = "is";

s2 = new Integer(42);

}

System.out.println();

}

private static void doPrint(String s1) {

System.out.print("Wrong!");

}

private static void doPrint(Object s1) {

System.out.print(s1 + " ");

}

}

在没有调试信息的情况下用源/目标级别1.1编译它(即不应存在局部变量信息)并尝试对其进行反编译.我尝试了Jad,JD-GUI和Fernflower,他们都至少有一个错误的通话(即程序打印“错误!”至少一次)

真的没有java反编译器可以推断出正确的强制转换,以便它不会调用错误的重载吗?

编辑:目标级别1.1,以便不存在特定于Java6的快速验证信息.这可能会给反编译器一个线索,即s1已被声明为Object而不是String.即使没有这些信息,反编译器也应该能够反编译代码(不一定得到原始变量类型,但显示相同的行为),特别是因为许多混淆器也将它剥离.

反编译器出了什么问题:

>他们在第一次通话中错过了演员(对象).

>他们将s1的类型推断为String,但忘记在对doPrint的调用中添加强制转换(以便调用String版本而不是Object版本).

>一个糟糕的(我甚至没有列出)甚至将s2的类型推断为String,导致无法编译的代码.

在任何情况下,此代码从不调用String重载,但反编译的代码确实如此.

java decompiler 使用_是否有任何Java Decompiler可以正确地反编译对重载方法的调用?...相关推荐

  1. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

  2. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  3. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  4. java string 不变_为什么String在java中是不可变的?

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  5. 支持java虚拟主机_为何缺乏支持Java的虚拟主机

    现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...

  6. java foreach 原理_一不小心就让Java开发者踩坑的failfast是个什么鬼?

    1 什么是fail-fast 首先我们看下维基百科中关于fail-fast的解释: 在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统.快速失效系统通常设计用于停止正常操作,而不是 ...

  7. java strim性能_你所不知道的Java性能优化之String!

    Java性能优化之String字符串优化 1.字符串对象及其特点 Java中八大基本数据类型没有String类型,因为String类型是Java对char数组的进一步封装. String类的实现主要由 ...

  8. 做Java头发少_这35个Java代码优化细节,你用了吗

    链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...

  9. 我的世java途径错误_我的世界JAVA路径错误的解决方法分享

    我的世界JAVA路径错误该怎么解决呢?JAVA是Minecraft运行的虚拟环境必要条件,需要您安装后才开始游戏.很多童鞋在安装过程中都遇到了JAVA路径错误的提示,这是什么原因导致的?第一手游网必须 ...

最新文章

  1. MDT 2010之部署Windows XP-5
  2. SAP Spartacus select option默认选择的实现
  3. NO.2_python_scrapy_反爬虫(随机请求头IP代理)取消链接去重
  4. Python学习16 正则表达式2 re模块
  5. 尚学堂java 参考答案 第七章
  6. 求多个数的最小公倍数
  7. 安装 pear、phpunit 测试用例步骤方法
  8. matlab中if语句中的结果返回,matlab中if 语句后面的判别式不能是算术表达式?或者说变量?...
  9. python报告水印怎么弄_超简单Python安全批量打水印教程!
  10. train_image_classifier.py:Cannot assign a device for operation CifarNet/conv1/Conv2D: node CifarNet
  11. 如何将所有音乐从 iPhone传输到Mac?
  12. bat命令 延迟执行
  13. 未在此计算机上注册ActiveX控件!!!
  14. 最新蓝屏代码0x0000006b完美解决方案,附文件
  15. 互联网思考悲伤之后 如何重新定位移动互联网方向
  16. ps 快速切图
  17. 基于视觉的机器人抓取: 论文及代码(Vision-based Robotic Grasping: Papers and Codes)
  18. 打印html java 清晰度_java 利用jsp打印html页面
  19. 骁龙8+gen1和a15差距 骁龙8+和苹果a15对比哪个好
  20. 概率论:先验与后验与似然

热门文章

  1. Python+tensorflow计算整数阶乘的方法与局限性
  2. Python提取docx文档中例题、插图、表格清单
  3. 苹果a10处理器_【突然】苹果宣布2019款iPad降价 发布不到半年最高降500
  4. linux 多线程 多进程 利用率,多进程与多线程的深度比较
  5. winform中listview选中整行_工作中常见的11个Excel难题,一次解决!
  6. java8 stringbuilder_有了Java8的“+”真的可以不要StringBuilder了吗
  7. dart调用python_Dart - Isolate 并发
  8. linux open o_creat 失败,linux C代码 open函数参数:O_APPEND问题求助
  9. java求值不用后缀表达式_数据结构之后缀表达式求值(java实现)
  10. cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)