[英]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中,我們無法使用int
或long
等基本類型實例化類型變量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.