gpt4 book ai didi

java - 这个 Java 方法签名的简单英语翻译是什么?

转载 作者:行者123 更新时间:2023-11-30 02:24:27 25 4
gpt4 key购买 nike

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

我很熟悉这个端口,但我无法理解这个方法签名的含义:

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

最佳答案

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

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

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

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

您也许可以使用 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

关于java - 这个 Java 方法签名的简单英语翻译是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46022085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com