0

get/set メソッドを使用して、作成したオブジェクトを繰り返し処理し、そのプロパティの一部を変更しようとしています。オブジェクトが 1 つしかないときはなんとか機能させましたが、現在は親オブジェクトを継承するオブジェクトがあり、それぞれに変更したいプロパティがわずかに異なります。例: String、Float、Integer、Double オブジェクト。実行時にどのオブジェクトが見つかるか分からないので、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;
}
}

継承されたオブジェクト クラスの 1 つを次に示します。

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!");
        }
    }
}
4

2 に答える 2

0

オブジェクトがどのクラスであるかを確認し、それをサブクラスにキャストしてメソッドにアクセスできます。それは何を達成したいですか?

    DataObject currentDataObject = it.next();
if(currentDataObject instanceof DoubleDataObject){
 DoubleDataObject doubleData = (DoubleDataObject) currentDataObject;
//check your methods
}
于 2013-10-21T08:57:34.803 に答える
0

これを使用できます:

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

currentDataObject が DoubleDataObject (および DoubleDataObject から継承したクラスではない) であるかどうかをテストするには

于 2013-10-21T08:59:48.390 に答える