将 Frege 列表转换为 Java 数组
Converting a Frege List to a Java Array
假设我在 Frege
中定义了一个小的、有点冗余的桥接函数
listToArray :: (PrimitiveArrayElement α) => [α] -> JArray α
listToArray = arrayFromList
和一些 Java 代码将已经获得的 TList<Long>
传递给它
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中,我们不能用像int
或long
.
这样的原始类型实例化类型变量A
这意味着,就目前而言,您的 listToArray
函数不适用于基于 Java 原始类型的 Frege 类型(据说这样的事情将是Java 10).
支持
对于基本类型的数组,您需要知道它是哪种类型,然后调用适当的方法,在您的情况下:
PreludeArrays.IPrimitiveArrayElement_Long.arrayFromList
另请注意,Frege 当前未明确支持盒装原始类型。这是因为通过 Javas 自动装箱和自动拆箱支持这些类型。
如果你真的需要一个装箱数组long
,你可以将java.lang.Long
定义为原生类型,使其成为ArrayElement
的实例并提供明确的装箱和拆箱功能。因为java.lang.Long
是引用类型,所以作为数组元素使用没有限制。
假设我在 Frege
中定义了一个小的、有点冗余的桥接函数listToArray :: (PrimitiveArrayElement α) => [α] -> JArray α
listToArray = arrayFromList
和一些 Java 代码将已经获得的 TList<Long>
传递给它
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中,我们不能用像int
或long
.
A
这意味着,就目前而言,您的 listToArray
函数不适用于基于 Java 原始类型的 Frege 类型(据说这样的事情将是Java 10).
对于基本类型的数组,您需要知道它是哪种类型,然后调用适当的方法,在您的情况下:
PreludeArrays.IPrimitiveArrayElement_Long.arrayFromList
另请注意,Frege 当前未明确支持盒装原始类型。这是因为通过 Javas 自动装箱和自动拆箱支持这些类型。
如果你真的需要一个装箱数组long
,你可以将java.lang.Long
定义为原生类型,使其成为ArrayElement
的实例并提供明确的装箱和拆箱功能。因为java.lang.Long
是引用类型,所以作为数组元素使用没有限制。