使用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 您可以使用像这样的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(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |