Fondamentalement, cette signature de fonction permet de gérer des tableaux de types différents en un seul endroit. S'il était programmé en C, il utiliserait probablement une macro (#define
) pour accomplir quelque chose de similaire.
Syntaxiquement, le <T>
signifie: T est un espace réservé pour toute classe d'objecs que arr passé à cette fonction. Si vous passez un objet de type T à cette fonction, alors tous les autres endroits qui mentionnent T dans cette fonction signifieront aussi ce type. De cette façon, vous n'avez pas besoin d'écrire des fonctions séparées si vous voulez gérer différents types. En interne, le compilateur peut bien générer du code séparé pour chaque type, cependant. Ainsi, les génériques sont un raccourci, vous permettant de travailler avec des types variables.
Cela sera difficile à traduire en Xojo, car il ne fournit aucun moyen pour cela. Étant donné que Xojo n'offre pas de support pour les génériques (modèles), vous devez rechercher les différents types de tableaux réellement utilisés avec cette fonction et écrire une fonction spécifique pour chacun de ces cas.
Vous pouvez peut-être utiliser la classe de base de Xojo Object
comme paramètre, bien que les tableaux de passage d'objet ne fonctionnent souvent pas en raison du contrôle de type plutôt statique de Xojo sur les tableaux.
Une astuce autour de ceci serait d'emballer le tableau dans un Variant, puis de traiter chaque type de tableau à l'intérieur. Ce ne serait pas encore générique mais garderait au moins tout dans une seule fonction, comme le fait l'original.
Quelque chose comme ceci:
Sub createObjects(arrayContainer as Variant, newAmount as Integer)
if not arrayContainer.IsArray then break ' assertion
// Handle case when array is of MyObject1
try
#pragma BreakOnExceptions off ' prevents Debugger from stopping here
dim a() as MyObject1 = arrayContainer
#pragma BreakOnExceptions default
for i as Integer = 1 to newAmount
a.Append new MyObject1
next
return
catch exc as TypeMismatchException
' fall thru
end try
// Handle more types here
break
End Sub
Alors appelez comme ceci:
dim d() as MyObject1
createObjects d, 3
Google pour "Java génériques tutoriel". Cliquez sur le premier lien –
Dans ce scénario, 'T' signifie _any_ class. Vous pouvez lire sur [Generics] (https://docs.oracle.com/javase/tutorial/java/generics/types.html). – Jaims
Il prend un tableau d'un type spécifié par 'Class' et le copie. Par exemple, vous pouvez l'appeler avec 'reallocateBuffer (String.class, stringArray, stringArray.length, 10_000)' - il retournera un nouveau 'String []' avec la longueur '10_000' - copiant sans doute les données de' stringArray' à le tableau nouvellement alloué. –