加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java 8 update101时,HashMap.entries无法强制转换为Collecti

发布时间:2020-12-15 04:48:11 所属栏目:Java 来源:网络整理
导读:更新到 Java 8更新101后,我在以下代码中遇到异常.它与Java 8更新91一起工作正常. 访问密钥库: KeyStore ks = KeyStore.getInstance("WINDOWS-MY"); ks.load(null,null); Field field = ks.getClass().getDeclaredField("keyStoreSpi"); field.setAccessible
更新到 Java 8更新101后,我在以下代码中遇到异常.它与Java 8更新91一起工作正常.

访问密钥库:

KeyStore ks = KeyStore.getInstance("WINDOWS-MY");
        ks.load(null,null);

        Field field =  ks.getClass().getDeclaredField("keyStoreSpi");
        field.setAccessible(true);

        KeyStoreSpi kss = (KeyStoreSpi) field.get(ks);

        Collection entries;

        field = kss.getClass().getEnclosingClass().getDeclaredField("entries");
        field.setAccessible(true);

        // This is where the exception happens
        entries = (Collection) field.get(kss);

        // I then have to loop on these entries,something like this:

        for (Object entry : entries) { //code }

类型转换,抛出异常:

java.util.HashMap cannot be cast to java.util.Collection

Java 8更新101中最近的任何更改?怎么解决?

解决方法

我确认它不能使用以下作为测试代码

import java.util.HashMap;
import java.util.Collection;

public class HelloWorld {
   public static void main(String[] args) {
      HashMap map = new HashMap();
      Collection c;
      c = (Collection) map;
   }
}

结果是线程“main”中的异常java.lang.ClassCastException:java.util.HashMap无法强制转换为java.util.Collection
????????在HelloWorld.main(HelloWorld.java:8)

您可以使用像这样的values()方法覆盖它

import java.util.HashMap;
import java.util.Collection;

public class HelloWorld {
   public static void main(String[] args) {
      HashMap map = new HashMap();
      Collection c;
      c = map.values();
   }
}

所以你的代码应该是这样的

import java.util.HashMap;
import java.util.Collection;
import java.security.*;
import java.lang.reflect.Field;

public class HelloWorld {
   public static void main(String[] args) {
    try{
      KeyStore ks = KeyStore.getInstance("WINDOWS-MY");
        ks.load(null,null);

        Field field =  ks.getClass().getDeclaredField("keyStoreSpi");
        field.setAccessible(true);

        KeyStoreSpi kss = (KeyStoreSpi) field.get(ks);

        Collection entries;

        field =kss.getClass().getEnclosingClass().getDeclaredField("entries");
        field.setAccessible(true);
        entries = ((HashMap) field.get(kss)).values();
    }catch(Exception e){
        e.printStackTrace();
    }
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读