基本上,該函數簽名使得可以處理不同類型的陣列在一個地方。如果它是用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'複製到新分配的數組。 –