M Morph Member Licensed User Longtime User Jan 21, 2013 #1 Guten Morgen, zurzeit plagt mich ein Problem das zugleich eine Frage aufwirft. 1. Mein Problem In einer Klasse fülle ich eine List mit Objekten (selbst definierter Type) wenn ich nun von "Main" aus auf diese Objekte zugreife wandeln sie sich vom Typ Object zu String und erzeugen so eine ClassCastException. Klassen funktion: Code: Copy Dim liste As List liste.Initialize Sub add_object Dim human As person For i = 0 To 5 - 1 human.name = "Mensch" & i human.age = 10 + i liste.add(human) Next End Sub Und im Main Code: Copy Type person (name As String, age As Int) Dim Mensch As Personen Mensch.Initialize Sub eintrag For i = 0 To Mensch.liste.size - 1 Log(Mensch.liste.Get(i)) Next End Sub Das ist natürlich nur ein sehr vereinfachtes Beispiel aber es sollte meinen Aufbau ganz gut darstellen. Das problem daran ist das ich es nicht als String gebrauchen kann. 2. Meine Frage Wenn ich meine Funktion im IDE "anspreche" dann erscheint dieser ToolTip wo dann etwas steht im Sinne von: "meine_funktion(Zahl As Int) As String". Was ich noch nicht ganz herausgefunden habe ist was "As String" in diesem Fall bedeutet. Bedeutet das, dass "meine_funktion" einen String zurück liefert? Oder das "Zahl" als String übergeben wird? Bei meiner Funktion wird nichts zurück gegeben sondern einfach nur ein View gefüllt darum versteh ich dieses "As String" noch weniger. Ich hoffe ich konnte meine Anliegen verständlich genug darlegen und bin auf eure Antworten gespannt. MfG Morph
Guten Morgen, zurzeit plagt mich ein Problem das zugleich eine Frage aufwirft. 1. Mein Problem In einer Klasse fülle ich eine List mit Objekten (selbst definierter Type) wenn ich nun von "Main" aus auf diese Objekte zugreife wandeln sie sich vom Typ Object zu String und erzeugen so eine ClassCastException. Klassen funktion: Code: Copy Dim liste As List liste.Initialize Sub add_object Dim human As person For i = 0 To 5 - 1 human.name = "Mensch" & i human.age = 10 + i liste.add(human) Next End Sub Und im Main Code: Copy Type person (name As String, age As Int) Dim Mensch As Personen Mensch.Initialize Sub eintrag For i = 0 To Mensch.liste.size - 1 Log(Mensch.liste.Get(i)) Next End Sub Das ist natürlich nur ein sehr vereinfachtes Beispiel aber es sollte meinen Aufbau ganz gut darstellen. Das problem daran ist das ich es nicht als String gebrauchen kann. 2. Meine Frage Wenn ich meine Funktion im IDE "anspreche" dann erscheint dieser ToolTip wo dann etwas steht im Sinne von: "meine_funktion(Zahl As Int) As String". Was ich noch nicht ganz herausgefunden habe ist was "As String" in diesem Fall bedeutet. Bedeutet das, dass "meine_funktion" einen String zurück liefert? Oder das "Zahl" als String übergeben wird? Bei meiner Funktion wird nichts zurück gegeben sondern einfach nur ein View gefüllt darum versteh ich dieses "As String" noch weniger. Ich hoffe ich konnte meine Anliegen verständlich genug darlegen und bin auf eure Antworten gespannt. MfG Morph
J Jost aus Soest Active Member Licensed User Longtime User Jan 22, 2013 #2 Zu 1: Du solltest das Dim-Statement in die Schleife verschieben, sonst enthält deine Liste 5 Verweise auf das gleiche Objekt: Code: Copy For i = 0 To 5 - 1 Dim human As person '<-- neues Objekt erzeugen human.name = "Mensch" & i human.age = 10 + i liste.add(human) Next Wenn du später auf die Liste zugreifst, solltest du das Listenobjekt einer entsprechenden Objektvariable zuweisen. Dann klappt es auch mit dem Zugriff auf die Objekteigenschaften. Ungetestetes Beispiel: Code: Copy Dim human as person For i = 0 To liste.size - 1 human = liste.Get(i) Log(human.name & ": " & human.age) Next Zu 2: B4A kennt leider kein Void (also ergebnislose Funktion), d. h. alle Subs sind immer Funktionen. Wenn du selbst keinen Rückgabetyp festlegst, benutzt B4A als Standardwert halt "As String". In deinem Fall also: Einfach ignorieren!
Zu 1: Du solltest das Dim-Statement in die Schleife verschieben, sonst enthält deine Liste 5 Verweise auf das gleiche Objekt: Code: Copy For i = 0 To 5 - 1 Dim human As person '<-- neues Objekt erzeugen human.name = "Mensch" & i human.age = 10 + i liste.add(human) Next Wenn du später auf die Liste zugreifst, solltest du das Listenobjekt einer entsprechenden Objektvariable zuweisen. Dann klappt es auch mit dem Zugriff auf die Objekteigenschaften. Ungetestetes Beispiel: Code: Copy Dim human as person For i = 0 To liste.size - 1 human = liste.Get(i) Log(human.name & ": " & human.age) Next Zu 2: B4A kennt leider kein Void (also ergebnislose Funktion), d. h. alle Subs sind immer Funktionen. Wenn du selbst keinen Rückgabetyp festlegst, benutzt B4A als Standardwert halt "As String". In deinem Fall also: Einfach ignorieren!
M Morph Member Licensed User Longtime User Jan 22, 2013 #3 Zu 1: Ups, den Fehler hab ich schon gemacht und eine ganze Weile gebraucht bis ich das mit dem Objekt geschnallt hab. Das mit der Objektvariable werde ich mal versuchen, meld mich ob es geklappt hat oder nicht Zu 2: Verstehe, dann ist ein weiteres Mysterium für mich gelöst. Vielen Dank für deine Antworten Edit: Vielen Dank, so klappt es. Last edited: Jan 23, 2013
Zu 1: Ups, den Fehler hab ich schon gemacht und eine ganze Weile gebraucht bis ich das mit dem Objekt geschnallt hab. Das mit der Objektvariable werde ich mal versuchen, meld mich ob es geklappt hat oder nicht Zu 2: Verstehe, dann ist ein weiteres Mysterium für mich gelöst. Vielen Dank für deine Antworten Edit: Vielen Dank, so klappt es.