如何在Java中迭代父对象并更改继承的对象属性

如何在Java中迭代父对象并更改继承的对象属性,java,android,inheritance,iterator,Java,Android,Inheritance,Iterator,我试图通过使用get/set方法遍历我创建的对象并更改其某些属性。当我只有一个对象时,我设法让它工作,但现在我有了继承父对象的对象,每个对象都有我想要更改的稍微不同的属性。例如,字符串、浮点、整数、双对象。在运行时,我不知道将找到哪个对象,因此我希望我的Android应用程序能够通过唯一的地址找到它,并通过迭代父对象来更改特定继承对象中的属性。如果有人可以的话,请帮我解决这个问题。先谢谢你 以下是父对象类代码: public class DataObject { private byte[]

我试图通过使用get/set方法遍历我创建的对象并更改其某些属性。当我只有一个对象时,我设法让它工作,但现在我有了继承父对象的对象,每个对象都有我想要更改的稍微不同的属性。例如,字符串、浮点、整数、双对象。在运行时,我不知道将找到哪个对象,因此我希望我的Android应用程序能够通过唯一的地址找到它,并通过迭代父对象来更改特定继承对象中的属性。如果有人可以的话,请帮我解决这个问题。先谢谢你

以下是父对象类代码:

public class DataObject 
{
private byte[] address;
private String type;
private boolean updatedFlag;
private boolean editedFlag;

public DataObject() 
{   
    updatedFlag = false;
    editedFlag = false;
}

public void setAddress(byte[] address)
{
    this.address = address;
}

public void setType(String type)
{
    this.type = type;
}

public void setUpdatedFlag(boolean updatedFlag)
{
    this.updatedFlag = updatedFlag;
}

public void setEditedFlag(boolean editedFlag)
{
    this.editedFlag = editedFlag;
}

public byte[] getAddress()
{   
    //return Arrays.toString(address);
    return address;
}

public String getType()
{
    return type;
}

public boolean getUpdatedFlag()
{
    return updatedFlag;
}

public boolean getEditedFlag()
{
    return editedFlag;
}
}
以下是继承的对象类之一:

public class DoubleDataObject extends DataObject
{
private double value;
private String range;

public DoubleDataObject() 
{

}

public void setValue(double value)
{
    this.value = value;
}

public void setRange(String range)
{
    this.range = range;
}

public double getValue()
{
    return value;
}

public String getRange()
{
    return range;
}
}
下面是迭代对象以更改其属性的代码:

private void setUpValues(byte[] address, byte[] value)
{   
    byte[] addressByteArray = address;

    Iterator<DataObject> it = dataObjects.iterator();

    while(it.hasNext())
    {
        DataObject currentDataObject = it.next();
        byte[] dataObjectByteArray = currentDataObject.getAddress();
        if(addressByteArray[0] == dataObjectByteArray[0])
        {
            System.out.println("Found subsystem!");

            if(addressByteArray[1] == dataObjectByteArray[1])
            {
                System.out.println("Found highlevel!");

                if(addressByteArray[2] == dataObjectByteArray[2])
                {
                    System.out.println("Found low level!");
                    System.out.println("Found data object!");

                    currentDataObject.setValue(value);
                    currentDataObject.setUpdatedFlag(true);

                    System.out.println("Data Object Address: " + Arrays.toString(currentDataObject.getAddress()));
                    System.out.println("Data Object Type: " + currentDataObject.getType());
                    System.out.println("Data Object Value: " + currentDataObject.getValue());
                    System.out.println("Data Object Range: " + currentDataObject.getRange());
                    System.out.println("Data Object Updated Flag: " + currentDataObject.getUpdatedFlag());
                    System.out.println("Data Object Edited Flag: " + currentDataObject.getEditedFlag());
                }
                else
                {
                    System.out.println("CANNOT FIND DATA OBJECT!");
                }
            }
            else
            {
                System.out.println("CANNOT FIND HIGH LEVEL!");
            }
        }
        else
        {
            System.out.println("CANNOT FIND SUBSYSTEM!");
        }
    }
}
private void设置值(字节[]地址,字节[]值)
{   
字节[]地址ByteArray=地址;
Iterator it=dataObjects.Iterator();
while(it.hasNext())
{
DataObject currentDataObject=it.next();
字节[]dataObjectByteArray=currentDataObject.getAddress();
if(addressByteArray[0]==dataObjectByteArray[0])
{
System.out.println(“找到子系统!”);
if(addressByteArray[1]==dataObjectByteArray[1])
{
System.out.println(“找到高级别!”);
if(addressByteArray[2]==dataObjectByteArray[2])
{
System.out.println(“发现低电平!”);
System.out.println(“找到数据对象!”);
currentDataObject.setValue(值);
currentDataObject.setUpdatedFlag(true);
System.out.println(“数据对象地址:+Arrays.toString(currentDataObject.getAddress()));
System.out.println(“数据对象类型:+currentDataObject.getType());
System.out.println(“数据对象值:+currentDataObject.getValue());
System.out.println(“数据对象范围:+currentDataObject.getRange());
System.out.println(“数据对象更新标志:+currentDataObject.getUpdatedFlag());
System.out.println(“数据对象编辑标志:+currentDataObject.getEditedFlag());
}
其他的
{
System.out.println(“找不到数据对象!”);
}
}
其他的
{
System.out.println(“找不到高级别!”);
}
}
其他的
{
System.out.println(“找不到子系统!”);
}
}
}

您可以检查对象是哪个类,并将其强制转换为子类以访问方法, 这就是你想要达到的目标吗

    DataObject currentDataObject = it.next();
if(currentDataObject instanceof DoubleDataObject){
 DoubleDataObject doubleData = (DoubleDataObject) currentDataObject;
//check your methods
}
您可以使用以下选项:

if (currentDataObject.getClass().equals(DoubleDataObject.class)) {
DoubleDataObject currentDoubleDataObject = (DoubleDataObject)currentDataObject;
currentDoubleDataObject .setValue(1.4d);
}

要测试currentDataObject是否是DoubleDataObject(而不是从DoubleDataObject继承的类)

定义“父对象”。DataObject是指父对象,其他对象继承DataObject的属性。不过,我有四个继承的数据对象。字符串、Int、Float和Double。这难道不是一大堆代码吗,因为我必须为每个数据对象执行一个if语句,或者它不会太重要吗?谢谢你的回答。