我有一个对象 obj 和一个类名 MyClass ,我可以使用instanceof检查obj是否为MyClass类型,或者我可以说obj.getClass() .equals( “MyClass的”)。 所以我想知道有没有其他方法来检查对象的类型。
答案 0 :(得分:2)
请注意,您引用的两个选项是不等于:
"foo" instanceof Comparable // returns true
"foo".getClass().equals(Comparable.class) // return false
答案 1 :(得分:2)
注意:instanceof
如果您的对象是MyClass
的子类,或者如果它实现了接口,则返回true(这通常是您感兴趣的 - 如果您记得“IS A” OOP概念)
另请参阅this关于Class.isAssignableFrom()
,类似于instanceof
,但更强大。
答案 2 :(得分:1)
答案 3 :(得分:0)
instanceof是另一种选择。
答案 4 :(得分:0)
instancef
不是正确的解决方案,因为它给出了类的子类。请改用:
obj.getClass().equals("MyClass")
答案 5 :(得分:0)
您可以通过obj.getClass().getSuperClass()
递归以获得与instanceof
类似的内容。
答案 6 :(得分:0)
正如其他人所说,instanceof
与equals
的功能不同。
另一方面,当在代码中处理这个问题时,使用Visitor - 模式是一个干净的(虽然不是代码行中最小的)解决方案。一个很好的优点是,一旦为一组类设置了访问者界面,就可以在需要处理类的所有/一些/一个不同扩展的所有其他地方重新使用它。