我一直在玩这个,到目前为止我还没有找到任何方法来隐藏或欺骗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
所以基本上,有没有办法隐藏这些信息或以某种方式丢失类型信息?我没有问,因为我有理由这样做,但是如果可能的话,我希望知道并在将来保持警惕.另外,我觉得它很有趣.