将ArrayList <object>转换为ArrayList <anothertype>

时间:2017-10-10 11:41:53

标签: java arraylist


我有一个界面:

public interface ICentrala extends Remote{
    int registerGate(Object gate) throws RemoteException;
}

课程:
Class&#34; Gate&#34;:

public class Gate{
    int number;
    int in=0;
    int out=0;
...
}

Class&#34; Centrala&#34;

    ...
ArrayList<Object> listaBramek = new ArrayList<Object>();
    ...    
    public int registerGate(Object bramka)   {
    listaBramek.add(bramka);
    return 0;
    }
    ...

现在举例来说我想添加2个门:

Gate gate1 = new Gate();
gate1.number=1;
Gate gate2 = new Gate();
gate2.number=2;
registerGate(gate1)
registerGate(gate2)

现在我想获得现有门的所有名称。我试过的是:

public void getGates(){
    for (Object object: listaBramek){
        System.out.println(object)
    }
}

但是在system.out.println&#34; number&#34;中的对象中之后并不存在。 我无法对Interface进行任何更改。 提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我不确定我完全理解你,但你可以覆盖类Gate中的toString()方法:

@Override
public String toString() {
    return "gate number: " + number;
}

答案 1 :(得分:1)

最好在Gate类中创建一个getter方法,如下所示:

public int getNumber(){
    return number;
}

然后在您使用listaBramek个对象填充Gate列表后,您可以循环浏览它们并在转换为Gate对象后打印出该值

for(Object object : listaBramek){
    System.out.println(((Gate) object).getNumber());
}

强制转换是必要的,因为Object没有定义number变量,Gate对象确实存在并且是Object类的扩展。当您循环使用它时,即使它们是Gate个对象,您也可以使用它们,就好像它们是通用的Object一样,因为

Object object:listaBramek

这不是最佳的,并且容易出现运行时错误,因为listaBramek列表不够严格 - 它应该只允许Gate个对象存储在其中,除非你是愿意做进一步的失败保险。