1 java casting compilation type-safety decompiler
正在运行服务器.一个人被解雇了.他删除了源代码.我们必须反编译....:我注意到几个奇怪的东西:
1)变量declerations也在程序的中间随机点2)没有HashMaps的类型安全性,例如
HashMap<Integer , Boolean> s = new HashMap<Integer , Boolean>();
Run Code Online (Sandbox Code Playgroud)
变成了HashMap s = new HashMap(); 一般来说,列表和收藏集也是如此.它也有一些副作用导致一些异常((Long)list.get(a_long).longValue()); 添加的内容是强制转换和longValue调用
3)我也注意到了一些垃圾编码
这些事情是否因为我反编译程序而发生,或者由于前编译器的编译器或愚蠢而发生了这些事情?
您所观察到的是类型擦除和自动装箱的结果.在Java泛型中,泛型类型由编译器强制执行,但字节代码级别的底层实现没有泛型类型的概念(它们被"擦除"),这就是它们消失的原因.类似地,Integer和int之间的转换(反之亦然)(以及其他原语的转换)是通过"autoboxing"完成的,这基本上是编译器为您转换这些显式调用转换方法的地方.