这个 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) {}
  1. 此方法 return 是任何 class 类型的数组吗?
  2. 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