기본적으로이 함수 시그니처는 한 곳에서 다른 유형의 배열을 처리 할 수있게합니다. C 언어로 프로그래밍 되었다면 비슷한 것을 이루기 위해 아마 매크로 (#define
)를 사용할 것입니다.
구문 상, <T>
은 다음을 의미합니다. T는이 함수에 전달 된 objecs의 클래스에 대한 자리 표시 자입니다. 이 함수에 T 유형의 객체를 전달하면이 함수 내부에서 T를 언급하는 다른 모든 장소도 해당 유형을 의미합니다. 그렇게하면 다른 유형을 처리하려는 경우 별도의 함수를 작성할 필요가 없습니다. 내부적으로 컴파일러는 각 유형별로 별도의 코드를 생성 할 수 있습니다. 따라서 제네릭은 바로 가기이므로 변수 유형으로 작업 할 수 있습니다.
Xojo로 변환하기가 어렵습니다. 아무 의미가 없으므로 Xojo로 번역하기가 어려울 것입니다.
Xojo는 Generics (Templates)에 대한 지원을 제공하지 않으므로이 기능에 실제로 사용되는 배열 유형을 찾아야하며이 경우 각각에 대해 특정 기능을 작성해야합니다.
Xojo의 기본 클래스 Object
을 매개 변수로 사용할 수 있지만 배열의 Xojo의 정적 유형 검사로 인해 Object 배열 전달이 작동하지 않는 경우가 많습니다.
이 문제를 해결하려면 Variant에 배열을 압축 한 다음 각 배열 유형을 특수하게 처리해야합니다. 그것은 여전히 일반적인 것은 아니지만 최소한 원래의 기능처럼 모든 기능을 단일 기능으로 유지합니다. 이 같은
뭔가 :
이
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
구글 "자바 제네릭 튜토리얼"에 대한. 첫 번째 링크를 클릭하십시오. –
이 시나리오에서 'T'는 _any_ 클래스를 의미합니다. [Generics] (https://docs.oracle.com/javase/tutorial/java/generics/types.html)에서 읽을 수 있습니다. – Jaims
'Class'에 의해 지정된 타입의 배열을 취하여 복사한다. 예를 들어,'reallocateBuffer (String.class, stringArray, stringArray.length, 10_000)'를 사용하여 그것을 호출 할 수 있습니다 - 길이가'10_000' 인 새로운'String []'을 반환합니다 - 아마도'stringArray'의 데이터를 새롭게 할당 할 수 있었던 배열 –