Java中判断对象是否为类实例的方法及Java 8 Stream实现方式
Java对象类型检查相关问题解答
1. 如何在Java中检查一个对象是否为某个类的实例?
在Java里做这个检查,最常用的有两种方式,各有适用场景:
instanceof关键字:这是最直观的写法,比如if (myObj instanceof ArrayList)。它会自动处理继承关系——如果myObj是目标类的子类实例,也会返回true,非常适合你明确知道要检查的类是什么的情况。Class.isInstance()方法:如果你手里只有一个Class对象(比如动态获取的类),就用这个方法,比如ArrayList.class.isInstance(myObj)。它的效果和instanceof完全一致,同样支持继承关系,灵活性更高。
2. Java 8 Stream中检查对象是否为多个类中任意一个的实例
你给出的那段Stream代码是没法编译通过的哦——instanceof的右侧必须是编译期就能确定的具体类名,不能是一个Class类型的变量c,编译器会报错的。不过我们可以换个思路,用Class.isInstance()来实现你想要的效果,完美适配Stream的写法:
Foo foo = new Foo(); if (Stream.of(Foo.class, Bar.class, FooBar.class) .anyMatch(clazz -> clazz.isInstance(foo))) { System.out.println("yes"); }
这样就优雅替代了那种一串instanceof用||连接的冗长写法。
如果你的业务里需要频繁做这种多类型检查,还可以把这些类提前存入一个Set<Class<?>>或者List<Class<?>>里,每次直接调用集合的stream()来判断,代码会更整洁。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

