在Java中,我们可以使用如下代码来判断对象是否为某个类型的实例:
if (a instanceof A) {
// do something...
}
但是,如果我们想把以上代码放到一个方法中,这个方法需要多次被调用,并且判断的类型并不只是A这一种,那么怎样动态地传入类型呢?Google了一下,得到以下解决方案。
先建立一个父类:
Father.java
public abstract class Father {
abstract void finish();
}
子类1:
Son1.java
public class Son1 extends Father {
@Override
void finish() {
// TODO Auto-generated method stub
System.out.println("Son1 finished");
}
}
子类2:
Son2.java
public class Son2 extends Father {
@Override
void finish() {
// TODO Auto-generated method stub
System.out.println("Son2 finished");
}
}
现在有如下要求:遍历一个集合里面的对象,如果该对象是Son1的实例,则调用其finish()方法。
实现如下:
public class Test {
public static void main(String[] args) {
List<Father> fathers = new ArrayList<Father>();
Son1 son1 = new Son1();
Son2 son2 = new Son2();
fathers.add(son1);
fathers.add(son2);
judegClass(fathers, Son1.class);
}
private static void judegClass(List<Father> fathers, Class<?> clazz) {
for (Father father : fathers) {
if (father.getClass().equals(clazz)) {
// 如果当前对象是Son1的实例,则运行该对象的finish()方法
father.finish();
}
}
}
}
输出结果:
Son1 finished
如果大家有更好的方式,欢迎一起讨论。