2016-03-07 89 views
0

我必须强制转换的Java对象的子类,因为需要设置在子类中提供的方法,然后我要设置超类对象在列表中的指标。类型转换的子类在Java中

我需要在这两者之间做任何事情或铸字后设定的指标是怎么回事,当我从列表获取对象用来反映?

MemRow是超类和MemAttrRow是新的物业recstat子类; 代码如下:

MemRow memRow; 
    List<MemRow> memRwList;//where the superclass will get added 
    // type cast to subclass memAttrRow and set the recstat 
    MemAttrRow memAttrRow = (MemAttrRow) memRow; 
    String ind= "A"; 
    memAttrRow.setRecStat(ind); 
    //add superclass to the list 
    memRwList.addRow(memRow); 
+1

我不能说这句话应该是什么意思,但看着你的代码 - 不,没有什么特别的你必须做的。 –

+1

你的问题目前还不清楚。铸造不会改变你指的是哪个对象,所以当你调用'setRecStat'时的改变仍然会在后面看到,如果这就是你的意思。我建议你尝试一下,如果你有问题,可以发布[mcve]。 –

+1

类型铸造不是这里的最佳做法。你可以做的是在子类中添加一个构造函数或setter,它可以从超类对象中初始化字段。然后,你可以做'MemAttrRow memAttrRow = new MemAttrRow(memRow)' –

回答

1

你不需要做任何事情。假设memRow实际上是MemAttrRow的一个实例,当您设置它的属性时,它将在像将对象添加到列表的操作期间保留。

但是,值得一提的是,在键入cast之前,您需要确保对象的实际(运行时)类型为MemAttrRow,否则您可以获得ClassCastException

+1

要检查它是否可以转换为MemAttrRow,请使用instanceof关键字:if(memRow instanceof MemAttrRow){//做某事}其他{//它不是MemAttrRow ...做其他事情} – Jeutnarg