这个Java方法签名的英文翻译是什么?

这个Java方法签名的英文翻译是什么?,java,box2d,jbox2d,xojo,Java,Box2d,Jbox2d,Xojo,我正在将JBox2D移植到Xojo。Java不是我很熟悉的语言,但它与Xojo有足够的相似性,这是将Box2D移植到它的最简单方法 我很熟悉港口,但我无法理解此方法签名的含义: public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity, int newCapacity) {} public static T[]reallocateBuffer

我正在将JBox2D移植到Xojo。Java不是我很熟悉的语言,但它与Xojo有足够的相似性,这是将Box2D移植到它的最简单方法

我很熟悉港口,但我无法理解此方法签名的含义:

  public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity,
      int newCapacity) {}
public static T[]reallocateBuffer(类klass,T[]oldBuffer,int oldCapacity,
int newCapacity){}
  • 此方法是否返回任何类类型的数组
  • Class klass
    是否意味着
    klass
    参数可以是任何类别的

  • 基本上,这个函数签名使得在一个地方处理不同类型的数组成为可能。如果它是用C语言编程的,它可能会使用宏(
    #define
    )来完成类似的任务

    语法上,
    表示:T是传递给此函数的任何对象类的占位符。如果将类型为T的对象传递给此函数,则此函数中提到T的所有其他位置也将表示该类型。这样,如果要处理不同的类型,就不必编写单独的函数。不过,在内部,编译器可能会为每种类型生成单独的代码。因此,泛型是一种快捷方式,允许您处理变量类型

    这将很难翻译成Xojo,因为它没有提供任何方法

    由于Xojo不提供对泛型(模板)的支持,因此您需要找出该函数实际使用了哪些不同的数组类型,并为每种情况编写一个特定的函数

    您可以使用Xojo的基类
    Object
    作为参数,尽管由于Xojo对数组进行相当静态的类型检查,传递对象数组通常不起作用

    解决这个问题的一个技巧是将数组打包成一个变量,然后对其中的每个数组类型进行特殊处理。这仍然不是泛型的,但至少会像最初的一样,将其全部保存在一个函数中

    大概是这样的:

    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
    
    那么就这样称呼它:

    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
    表示任何类。您可以在上读。它获取
    Class
    指定类型的数组并复制它。例如,您可以使用
    reallocateBuffer(String.class,stringArray,stringArray.length,10_000)
    调用它-它将返回一个新的
    String[]
    ,长度
    10_000
    -可能是将数据从
    stringArray
    复制到新分配的数组中。答案很好。谢谢你,托马斯。“code>Auto”类是否更能替代
    Object
    ?否,
    Auto
    只能使您不必写入特定类型(类名)。它不是允许您在一个位置使用不同类型的占位符。