基本上,该函数签名使得可以处理不同类型的阵列在一个地方。如果它是用C编写的,它可能会使用宏(#define
)来完成类似的事情。
在语法上,<T>
装置:T是任何类objecs的那ARR传递给此函数的占位符。如果您将T类型的对象传递给此函数,则在此函数中提及T的所有其他地方也将表示该类型。这样,如果您想处理不同的类型,则不必编写单独的函数。但是,在内部,编译器可能会为每种类型生成不同的代码。所以,泛型是一个捷径,让你使用变量类型。
这将很难转化为Xojo,因为它没有提供任何手段。
由于Xojo不提供泛型(模板)的支持,你需要找出哪些不同数组类型实际上与此功能使用,并写出每种情况的特定功能。
虽然由于Xojo对数组的静态类型检查,传递Object的数组通常不起作用,您或许可以使用Xojo的基类Object
作为参数。
解决此特技将所述阵列包成一个变量,然后专用手柄每个阵列型的内部。这仍然不是通用的,但至少将其全部保存在一个函数中,就像原来的一样。
事情是这样的:
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
然后调用它像这样:
dim d() as MyObject1
createObjects d, 3
谷歌为 “Java泛型教程”。点击第一个链接。 –
在这种情况下,'T'表示_any_类。你可以阅读[泛型](https://docs.oracle.com/javase/tutorial/java/generics/types.html)。 – Jaims
它需要一个'Class'指定的类型的数组并将其复制。例如,你可以用'reallocateBuffer(String.class,stringArray,stringArray.length,10_000)'调用它 - 它会返回一个新的'String []'长度为10_000' - 可能是将数据从'stringArray'复制到新分配的数组。 –