【发布时间】:2014-02-23 14:38:55
【问题描述】:
如何使用 out instanceof 语句动态向下转换对象? 我在阅读 Bruce Eckel 的 Thinking in Java,并在那里使用 Class,并且有这样一个主题,但我没有接近 附:对不起我的英语。
public class GenericTest {
static private interface Base {
}
static private class A implements Base {
}
static private class B implements Base {
}
static private class C extends B {
}
private List<Class<? extends Base>> types;
private List<Base> objects;
public GenericTest() {
types = new ArrayList<Class<? extends Base>>();
types.add(A.class);
types.add(B.class);
types.add(C.class);
objects = new ArrayList<Base>(Arrays.asList(new A(), new B(), new C()));
for (Base base : objects) {
if (base instanceof A)
test((A) base);
else if (base instanceof C)
test((C) base);
else if (base instanceof B)
test((B) base);
for (Class<? extends Base> c : types)
if (base.getClass().equals(c))
test(c.cast(base));
}
}
private void test(A a) {
System.out.println("A");
}
private void test(B b) {
System.out.println("B");
}
private void test(C c) {
System.out.println("C");
}
private void test(Base base) {
System.out.println("Base");
}
public static void main(String[] args) {
new GenericTest();
}
}
【问题讨论】:
-
考虑使用访问者模式。
-
更详细地描述您真正想要实现的目标。在大多数情况下,使用
instanceof至少是可疑的。 -
发布的回复是否回答了您的问题?
标签: java generics rtti instanceof downcast