这个 Java 方法签名的简单英语翻译是什么?
What is the translation of this Java method signature in plain English?
我正在将 JBox2D 移植到 Xojo。 Java 不是我熟悉的语言,但与 Xojo 有足够的相似之处,因此这是将 Box2D 移植到它的最简单方法。
我很熟悉这个端口,但我无法理解这个方法签名的含义:
public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity,
int newCapacity) {}
- 此方法 return 是任何 class 类型的数组吗?
Class<T> klass
是否意味着klass
参数可以是任何class?
基本上,该函数签名使得在一个地方处理不同类型的数组成为可能。如果它是用 C 编写的,它可能会使用宏 (#define
) 来完成类似的事情。
语法上,<T>
表示:T 是传递给此函数的任何 class 对象的占位符。如果将类型 T 的对象传递给此函数,则此函数内所有其他提及 T 的地方也将表示该类型。这样,如果您想处理不同的类型,就不必编写单独的函数。不过,在内部,编译器可能会为每种类型生成单独的代码。所以,泛型是一种捷径,让您可以使用变量类型。
这很难翻译成 Xojo,因为它没有为此提供任何方法。
由于 Xojo 不提供对泛型(模板)的支持,您需要找出该函数实际使用了哪些不同的数组类型,并为每种情况编写一个特定的函数。
您可以使用 Xojo 的基础 class 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
我正在将 JBox2D 移植到 Xojo。 Java 不是我熟悉的语言,但与 Xojo 有足够的相似之处,因此这是将 Box2D 移植到它的最简单方法。
我很熟悉这个端口,但我无法理解这个方法签名的含义:
public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity,
int newCapacity) {}
- 此方法 return 是任何 class 类型的数组吗?
Class<T> klass
是否意味着klass
参数可以是任何class?
基本上,该函数签名使得在一个地方处理不同类型的数组成为可能。如果它是用 C 编写的,它可能会使用宏 (#define
) 来完成类似的事情。
语法上,<T>
表示:T 是传递给此函数的任何 class 对象的占位符。如果将类型 T 的对象传递给此函数,则此函数内所有其他提及 T 的地方也将表示该类型。这样,如果您想处理不同的类型,就不必编写单独的函数。不过,在内部,编译器可能会为每种类型生成单独的代码。所以,泛型是一种捷径,让您可以使用变量类型。
这很难翻译成 Xojo,因为它没有为此提供任何方法。
由于 Xojo 不提供对泛型(模板)的支持,您需要找出该函数实际使用了哪些不同的数组类型,并为每种情况编写一个特定的函数。
您可以使用 Xojo 的基础 class 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