2017-09-03 5 views
1

저는 JBox2D를 Xojo로 이관하고 있습니다. Java는 잘 알고있는 언어가 아니지만 Box2D를이 언어로 포팅하는 가장 쉬운 방법은 Xojo와 유사한 점이 많습니다.이 Java 메소드 서명을 일반 영어로 번역하면 어떻게됩니까?

나는 포트에 잘 모르지만, 나는이 방법 서명의 의미를 추측 할 수 없습니다

public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity, 
     int newCapacity) {} 
  1. 이 방법은 모든 클래스 타입의 배열을 반환합니까?
  2. Class<T> klassklass 매개 변수가 어떤 클래스에 속할 수 있다는 것을 의미합니까?
+0

구글 "자바 제네릭 튜토리얼"에 대한. 첫 번째 링크를 클릭하십시오. –

+0

이 시나리오에서 'T'는 _any_ 클래스를 의미합니다. [Generics] (https://docs.oracle.com/javase/tutorial/java/generics/types.html)에서 읽을 수 있습니다. – Jaims

+0

'Class '에 의해 지정된 타입의 배열을 취하여 복사한다. 예를 들어,'reallocateBuffer (String.class, stringArray, stringArray.length, 10_000)'를 사용하여 그것을 호출 할 수 있습니다 - 길이가'10_000' 인 새로운'String []'을 반환합니다 - 아마도'stringArray'의 데이터를 새롭게 할당 할 수 있었던 배열 –

답변

2

기본적으로이 함수 시그니처는 한 곳에서 다른 유형의 배열을 처리 할 수있게합니다. 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 
+0

완벽한 답변. 토마스 감사합니다. 'Auto' 클래스가'Object'를 대체 할 수 있을까요? – Garry

+0

아니요, '자동'은 특정 유형 (클래스 이름)을 * 쓰지 않고 저장할 수 있습니다. 한 자리에서 다른 유형을 사용할 수있게 해주는 자리 표시자가 아닙니다. –