German Objekt übergabe & sub parameter

Morph

Member
Licensed User
Longtime User
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:
B4X:
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

B4X:
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
 

Jost aus Soest

Active Member
Licensed User
Longtime User
Zu 1:

Du solltest das Dim-Statement in die Schleife verschieben, sonst enthält deine Liste 5 Verweise auf das gleiche Objekt:
B4X:
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:
B4X:
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!
 

Morph

Member
Licensed User
Longtime User
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:
Top