我一直在玩这个,到目前为止,我还没有找到任何方法来隐藏或通过混淆层隐藏它的类型来欺骗instanceof
返回false
,但这并不意味着这是不可能的,因为我远离最了解 Java 的人。所以特地来请教专家。
我尝试了以下组合,在每种情况下,instanceof
操作员都能够识别对象的真实/基本类型。
public class Test {
public static void main(String[] args) {
Object o = new TestObject();
printType("Base Class", o);
o = (TestSuperObject)(new TestObject());
printType("Super Class", o);
o = (TestInterface)(new TestObject());
printType("Interface", o);
o = (TestInterface)((TestSuperObject3)(new TestObject3()));
printType("Interface on Super Class", o);
o = (TestSuperObject3)((TestInterface)(new TestObject3()));
printType("Super Class on Interface", o);
}
private static void printType(String testCase, Object o) {
System.out.println(testCase);
System.out.println("TestObject:" + (o instanceof TestObject));
System.out.println("TestObject2:" + (o instanceof TestObject2));
System.out.println("TestObject3:" + (o instanceof TestObject3));
System.out.println();
}
}
这些类被定义为...
public class TestObject extends TestSuperObject implements TestInterface
public class TestObject2 extends TestSuperObject implements TestInterface
public interface TestInterface
public class TestSuperObject
public class TestObject3 extends TestSuperObject3
public class TestSuperObject3 implements TestInterface
所以基本上,有没有办法隐藏这些信息或以某种方式丢失类型信息?我不问是因为我有这样做的理由,而是如果可能的话,我想知道它并在未来保持警惕。另外,我只是觉得它很有趣。