私はこれで遊んでいますが、これまでのところ、難読化の層を介してそのタイプを隠すことで、隠したり、だまし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
基本的に、この情報を非表示にしたり、何らかの形で型情報を失う方法はありますか? 理由があって聞くのではなく、可能であれば知りたいし、今後気をつけたいと思います。さらに、私はそれが面白いと思います。