gpt4 book ai didi

java - 将 Frege 列表转换为 Java 数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:57 26 4
gpt4 key购买 nike

假设我有一个用 Frege 定义的小的、有点冗余的桥接函数

listToArray :: (PrimitiveArrayElement α) => [α] -> JArray α
listToArray = arrayFromList

和一些通过已获得的 TList<Long> 的 Java 代码对它

TList<Long> tl_results = ...
Long[] results = FregeStuffies.listToArray(IPrimitiveArrayElement_Long.it, Thunk.lazy(results));

Eclipse 提示传递给 FregeStuffies.listToArray 的参数不适用于它是什么

listToArray(PreludeArrays.CPrimitiveArrayElement<α[],α>, Lazy<PreludeBase.TList<α>>)

我是否传递了错误的{上下文}/{PrimitiveArrayElement 的实例| }?

最佳答案

原始数组类型在 Java 中需要一些特殊处理,这也禁止在 Frege 中完全泛型使用。

这是因为在 Java 中我们还不能将原始类型作为泛型。当我们有

 static<A> ... foo(A[] arg) { ... }

在 Java 中,我们不能用 intlong 等原始类型实例化类型变量 A

这意味着,就目前而言,您的 listToArray 函数不适用于基于 Java 原始类型的 Frege 类型(据说 Java 将支持此类内容10).

对于基本类型的数组,您需要知道它是哪种类型,然后根据您的情况调用适当的方法:

PreludeArrays.IPrimitiveArrayElement_Long.arrayFromList

另请注意,Frege 当前未明确支持盒装原始类型。这是因为这些类型是通过 Java 的自动装箱和自动拆箱自动支持的。

如果你真的需要一个装箱的long数组,你可以将java.lang.Long定义为一个原生类型,让它成为ArrayElement<的一个实例 并提供明确的装箱和拆箱功能。因为 java.lang.Long 是引用类型,所以作为数组元素使用没有限制。

关于java - 将 Frege 列表转换为 Java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368309/

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