最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java.lang.ArrayStoreException異常的解決方案

 更新時間:2021年12月30日 11:20:42   作者:我是蟻人  
這篇文章主要介紹了java.lang.ArrayStoreException異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java.lang.ArrayStoreException異常

異常提示

java.lang.ArrayStoreException: java.lang.Boolean
at java.util.stream.Nodes$FixedNodeBuilder.accept(Nodes.java:1222)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
at

查詢百度的解釋:試圖將錯誤類型的對象存儲到一個對象數(shù)組時拋出的異常。之后,在看看自己錯誤的代碼:

Field[] filterCopyFields = Stream.of(appendFields)
     .map(f -> !preFieldNames.contains(f.getName())).toArray(Field[]::new);

很容易看出問題的所在,這里我是想過濾Field[]數(shù)組中的元素,!preFieldNames.contains(f.getName())這個是過濾條件,發(fā)現(xiàn)了這里使用的居然是map,過濾應(yīng)該是使用filter,map中的元素應(yīng)該是返回結(jié)果并在toArray方法中轉(zhuǎn)換成數(shù)組,這里map中返回的是Boolean布爾類型的數(shù)據(jù),也就是說不能將boolean類型的對象存儲到Field對象數(shù)組中。

這里可以看一下JDK8源碼中對toArray(IntFunction<A[]> generator)方法的定義:

    /**
     * Returns an array containing the elements of this stream, using the
     * provided {@code generator} function to allocate the returned array, as
     * well as any additional arrays that might be required for a partitioned
     * execution or for resizing.
     *
     * <p>This is a <a href="package-summary.html#StreamOps" rel="external nofollow" >terminal
     * operation</a>.
     *
     * @apiNote
     * The generator function takes an integer, which is the size of the
     * desired array, and produces an array of the desired size.  This can be
     * concisely expressed with an array constructor reference:
     * <pre>{@code
     *     Person[] men = people.stream()
     *                          .filter(p -> p.getGender() == MALE)
     *                          .toArray(Person[]::new);
     * }</pre>
     *
     * @param <A> the element type of the resulting array
     * @param generator a function which produces a new array of the desired
     *                  type and the provided length
     * @return an array containing the elements in this stream
     * @throws ArrayStoreException if the runtime type of the array returned
     * from the array generator is not a supertype of the runtime type of every
     * element in this stream
     */
    <A> A[] toArray(IntFunction<A[]> generator);

可以看到toArray()的參數(shù)是IntFunction<A[]>類型,從@param A the element type of the resulting array這個注解中可以看到,A是表示返回數(shù)組的元素類型,在我的例子中返回類型是一個Field,而如果Stream中使用了map遍歷,返回的類型又是Boolean,類型不匹配而出現(xiàn)錯誤。

解決更改

Field[] filterCopyFields = Stream.of(appendFields)
     .filter(f -> !preFieldNames.contains(f.getName())).toArray(Field[]::new);

其實這種小問題應(yīng)該很容易避免,在出現(xiàn)ArrayStoreException異常時應(yīng)該對應(yīng)著數(shù)組中的元素類型去查找錯誤,構(gòu)造數(shù)組時應(yīng)按照正確的類型來構(gòu)造。

Java工具類List的toArray方法及java.lang.ArrayStoreException

1.List接口中有兩個方法

Object[] toArray(); 
T[] toArray(T[] a);

分析:不帶參數(shù)的方法默認是把數(shù)組轉(zhuǎn)換為Object類型,而帶參數(shù)的方法會將數(shù)組轉(zhuǎn)換為指定的類型;

指定目標數(shù)組數(shù)據(jù)類型:

        List<Integer> list = new ArrayList<Integer>();
        list.add(12);
        list.add(13);
        list.toArray(new Integer[list.size()]);

不指定目標數(shù)組數(shù)據(jù)類型獲得的數(shù)組類型是Object類型:

        List<Integer> list = new ArrayList<Integer>();
        list.add(12);
        list.add(13);
        list.toArray();

2.使用toArray方法是出現(xiàn)java.lang.ArrayStoreException異常

public class StingUtilsTest{
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(12);
        list.add(13);
        list.toArray(new Long[list.size()]);
    }
}

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:390)
at common.lang.StingUtilsTest.main(StingUtilsTest.java:23)

分析:出現(xiàn)這種異常是由于數(shù)組中存入的數(shù)據(jù)與要轉(zhuǎn)換的目標數(shù)組的類型不一致導(dǎo)致的;還有一點需要注意的是toArray參數(shù)數(shù)組的初始化大小如果list.size大于等于list的列表的長度那么就默認使用當(dāng)前的參數(shù)數(shù)組,如果小于list的長度就會重新創(chuàng)建一個數(shù)組,建議如果知道list的長度一定要初始化數(shù)組的長度,這樣可以節(jié)省內(nèi)存空間,提高效率;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java代碼規(guī)范與質(zhì)量檢測插件SonarLint的使用

    Java代碼規(guī)范與質(zhì)量檢測插件SonarLint的使用

    本文主要介紹了Java代碼規(guī)范與質(zhì)量檢測插件SonarLint的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java獲取Process子進程進程ID方法詳解

    Java獲取Process子進程進程ID方法詳解

    這篇文章主要介紹了Java獲取Process子進程進程ID方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • Mybatis獲取參數(shù)值和查詢功能的案例詳解

    Mybatis獲取參數(shù)值和查詢功能的案例詳解

    這篇文章主要介紹了Mybatis獲取參數(shù)值和查詢功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 使用SpringBoot編寫一個優(yōu)雅的單元測試

    使用SpringBoot編寫一個優(yōu)雅的單元測試

    這篇文章主要為大家詳細介紹了如何使用SpringBoot編寫一個優(yōu)雅的單元測試,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-07-07
  • 解析MyBatisPlus解決邏輯刪除與唯一索引的兼容問題

    解析MyBatisPlus解決邏輯刪除與唯一索引的兼容問題

    這篇文章主要介紹了MyBatisPlus解決邏輯刪除與唯一索引的兼容問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 創(chuàng)建Jersey REST 服務(wù),基于Maven的實現(xiàn)

    創(chuàng)建Jersey REST 服務(wù),基于Maven的實現(xiàn)

    下面小編就為大家?guī)硪黄獎?chuàng)建Jersey REST 服務(wù),基于Maven的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java Hibernate延遲加載

    java Hibernate延遲加載

    對one-to-one 關(guān)系進行延遲加載和其他關(guān)系相比稍微有些不同。many-to-one 的延遲加載是在配置文件的class 標簽
    2008-10-10
  • c#和java base64不一致的解決方法

    c#和java base64不一致的解決方法

    最近非常郁悶的處理這個base64的問題,同樣的一個圖片文件,在java和c#進行base64編碼后結(jié)果不一樣,苦惱了很久,下面這篇文章主要給大家介紹了關(guān)于c#和java base64不一致的解決方法,需要的朋友可以參考下
    2018-11-11
  • Spring三種方法的注解自動注入問題

    Spring三種方法的注解自動注入問題

    這篇文章主要介紹了Spring三種方法的注解自動注入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java 深拷貝與淺拷貝的分析

    Java 深拷貝與淺拷貝的分析

    本文主要介紹java 的深拷貝和淺拷貝,這里通過實例代碼對深拷貝和淺拷貝做了詳細的比較,希望能幫到有需要的小伙伴
    2016-07-07

最新評論

大理市| 阿巴嘎旗| 府谷县| 闵行区| 祁连县| 女性| 裕民县| 辰溪县| 大同市| 黄骅市| 榕江县| 金塔县| 虞城县| 丰宁| 鄂州市| 金川县| 庆元县| 赤水市| 普格县| 台中市| 崇左市| 常熟市| 彰化县| 峨眉山市| 阳泉市| 边坝县| 锡林郭勒盟| 乐平市| 昭通市| 曲阳县| 新田县| 昌江| 惠州市| 丰县| 巫溪县| 牡丹江市| 金堂县| 维西| 荆门市| 冕宁县| 舞阳县|