除了instanceof运算符之外还有什么办法可以在java中进行对象类型比较吗?

时间:2008-12-18 05:34:26

标签: java

我记得在一些Java书中读到除了'instanceof'之外的任何运算符,用于比较两个对象之间的类型层次结构。

instanceof是最常用和最常见的。我无法清楚地记得是否确实存在其他方式。

4 个答案:

答案 0 :(得分:6)

您也可以使用Class.isInstance进行反思。

Class<?> stringClass = Class.forName("java.lang.String");
assert stringClass.isInstance("Some string");

显然,如果在编译时知道类的类型,那么instanceof仍然是最佳选择。

答案 1 :(得分:6)

是的,有。不是运算符而是Class类的方法。

这是: isIntance(Object o )

来自doc:

的引用
  

...此方法是Java语言instanceof operator

的动态等价物
public class Some {
    public static void main( String [] args ) {
        if ( Some.class.isInstance( new SubClass() ) ) {
            System.out.println( "ieap" );
        } else { 
            System.out.println( "noup" );
        }
    }
}
class SubClass extends Some{}

答案 2 :(得分:3)

操作实例是最佳选择,原因有两个: 1)它处理子类型,所以如果你有一个子类/子类型的实例,你仍然会得到真实。 2)它处理null,因此null instanceof Class将返回false

如果你拿一个对象的类然后与另一个类进行比较,那么你冒着冒一个空对象的类的风险,你不能直接得到子类型。

如果使用表示类的对象,则可以使用反射操作,因为instanceof将引用它们自己的类Class,而不是它们所代表的类。

答案 3 :(得分:1)

if ( someClass.isAssignableFrom( obj.getClass() ) )

相当于

if ( obj instanceof Foo )

如果在编译时已知要检查的类,则使用instanceof,如果仅在运行时知道,则使用isAssignableFrom