簡體   English   中英

將Frege列表轉換為Java數組

[英]Converting a Frege List to a Java Array

假設我在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<α>>)

我是否傳遞了錯誤的{context} / { PrimitiveArrayElement實例}?

原始數組類型需要在Java中進行一些特殊處理,這也禁止在Frege中完全使用泛型。

這樣做的原因是我們在Java中不能將原始類型作為泛型。 當我們有

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

在Java中,我們無法使用intlong等基本類型實例化類型變量A

這意味着,就目前而言, listToArray函數不適用於基於Java原始類型的Frege類型(據說Java 10中將支持這些內容)。

對於基本類型的數組,您需要知道它是哪種類型,然后在您的情況下調用適當的方法:

PreludeArrays.IPrimitiveArrayElement_Long.arrayFromList

另請注意,Frege目前尚未明確支持盒裝基元類型。 這是因為這些類型通過Javas自動裝箱和自動取消裝箱自動支持。

如果你真的需要一個盒裝long的數組,你可以將java.lang.Long定義為本機類型,使其成為ArrayElement的實例並提供明確的裝箱和拆箱功能。 因為java.lang.Long是一個引用類型,所以將它用作數組元素沒有任何限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM