我有两个A和B类,其中A是基类,B是从A继承的。
%%b
我声明了一个A类的ArrayList,并将Class A和Class B对象插入其中。
我的问题是当我尝试获取Class A的ArrayList中的Class B对象,然后将其转换为Class B时,如下所示
{{#restricted-access required-action="AddRoles" noAccessText="You can not add Roles"}}
<button class="btn btn-success" {{action 'add'}}>
Add New Role
</button>
{{/restricted-access}}
对象B中bar的值未定义。
如何从Class A ???的ArrayList中获取Object B的值
答案 0 :(得分:2)
不要尝试对这样的实例进行类型转换。在使用getClass()==
调用任何方法/字段之前检查类型。
if(myInstance.getClass()==B.class)
//print myInstance.bar
注意:这不是一个好的设计,因为你打破引入了泛型的最重要的东西(你可以看到当你这样做时会发生什么)
答案 1 :(得分:0)
不明白你需要什么,但我试着写一些测试,它可以正常工作
@Test
public void test() {
class A {
int foo = 10;
}
class B extends A {
int bar = 100;
}
ArrayList list = new ArrayList();
Random r = new Random();
for (int i=0; i<10; i++) {
if (r.nextBoolean()) {
list.add(new A());
} else {
list.add(new B());
}
}
ArrayList<A> listA = new ArrayList<A>();
ArrayList<B> listB = new ArrayList<B>();
for (Object o: list) {
if (o instanceof B) {
listB.add((B) o);
} else if (o instanceof A) {
listA.add((A) o);
}
}
}