从基类的ArrayList转换为继承的类

时间:2015-04-23 06:55:04

标签: java debugging inheritance arraylist casting

我有两个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的值

2 个答案:

答案 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);
        }
    }
}