我有一个超类和子类.
我在子类中,在超级方法中,我想检查某个参数对象是否属于某个子类.
我想要类似的东西
if (MyObj instanceof this)
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么?我知道我能做到
if (MyObj.getClass.equals(this.getClass)
Run Code Online (Sandbox Code Playgroud)
但这并不太有效
在超类方法中引用子类表示需要重构的设计问题.虽然你可以这样做(if (this instanceof SubClass)),它会将超类紧密地耦合到子类(es).在基于类的OOP中,子类当然与超类紧密耦合(继承本质上是紧耦合),但反过来很少是真的,几乎从不适合.
在效率方面,if (this instanceof SomeClass)很好.
编辑:从你的编辑开始,你似乎想要在超类的方法中找出它是在最终运行时类是超类而不是子类的实例上调用的.这是一个稍微不同的东西,AFAIK是最有效的方式,就像你引用的那样:
if (this.getClass().equals(TheClass.class))
Run Code Online (Sandbox Code Playgroud)
不过,它仍然表明该类希望稍微重构一下.
编辑2:但是从你对这个问题的评论中,听起来你想要将它与你所持有的成员的类进行比较.如果该成员是该类本身的实例,请使用上述内容.如果它可能会有所不同,那么:
if (this.getClass().equals(theMember.getClass()))
Run Code Online (Sandbox Code Playgroud)