I confirm that this does not work using the following as test code
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; } }
The result is an exception in the "main" thread java.lang.ClassCastException: java.util.HashMap cannot be passed to java.util.Collection on HelloWorld.main (HelloWorld.java:8)
You can override it using values โโ() method like this
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(); } }
So your code should look like this
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(); } } }
Alexius Diakogiannis Jul 21 '16 at 13:35 2016-07-21 13:35
source share