【发布时间】:2011-01-25 12:02:38
【问题描述】:
在一个 android 应用程序测试套件中,我有一个这样的类,其中 B 是一个视图:
public class A extends B {
... etc...
}
现在我有一个视图对象列表,其中可能包含A 对象,但在这种情况下,我只关心它们是否是B 的子类或“实例”。我想做类似的事情:
ArrayList<View> viewList = getViews();
Iterator<View> iterator = viewList.iterator();
while (iterator.hasNext() && viewList != null) {
View view = iterator.next();
if (view.getClass().isInstance(B.class)) {
// this is an instance of B
}
}
问题是当if 遇到A 对象时,它不会评估为“B 的实例”。有什么办法可以做isSubclassOf 什么的吗?
【问题讨论】:
-
来自Effective C++,作者Scott Meyers:“任何时候你发现自己在编写格式为”的代码,如果对象是T1类型,那么做一些事情,但如果它是T2类型,那么做其他事情” 打自己一巴掌。你能不能不使用重写的方法?或者像访问者模式这样的东西。
-
这是一个测试用例,所以代码实际上不在生产应用程序中,它是为了测试以确保使用正确的类:)
-
如果 viewList 数组为空,那么您的程序会崩溃,即使签入也无济于事。
-
类不变断言就是这样做的一种情况。 (正如 iamamused 所说)
标签: java subclass instanceof