2013-10-21 51 views
0

我想通過使用get/set方法遍歷一個已創建的對象並更改其某些屬性。當我只有一個對象時,我設法使它工作,但現在我擁有繼承父對象的對象,並且每個對象都具有我想要更改的稍微不同的屬性。例如。一個String,Float,Integer,Double對象。在運行時,我不知道哪個對象會被找到,所以我希望我的Android應用程序能夠通過唯一地址找到它,並通過迭代父對象來更改特定繼承對象中的屬性。如果有人能解決這個問題,請幫助我。先謝謝你。如何遍歷父對象並更改Java中的繼承對象屬性

這裏是父對象類代碼:

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

定義 '父對象'。 – EJP

+0

DataObject就是我所說的父對象,其他對象繼承了DataObject的屬性。 –

回答

0

您可以檢查一個對象是哪個類,並將其轉換爲子類以訪問s的方法, 是你想實現的嗎?

DataObject currentDataObject = it.next(); 
if(currentDataObject instanceof DoubleDataObject){ 
DoubleDataObject doubleData = (DoubleDataObject) currentDataObject; 
//check your methods 
} 
0

您可以使用此:

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

要測試currentDataObject是DoubleDataObject(而不是類從DoubleDataObject繼承)

+0

雖然我有四個繼承的數據對象。字符串,詮釋,浮法和雙。這不會最終成爲很多代碼,因爲我將不得不爲每個DataObject執行if語句,否則它不會太重要?謝謝您的回答。 –