java - How to reflect a field that implements map interface? -
i'm trying value of following field via reflection:
map<string,classloader> loaders0 = new linkedhashmap<string,classloader>(); but when try value using field.get(new linkedhashmap()), following:
java.lang.illegalargumentexception: can not set java.util.map field loaders0 java.util.linkedhashmap and seeing map interface not make new map interface set too. know how around this?
field loadersfield = this.getpluginloader().getclass().getdeclaredfield("loaders0"); togglefinal(loadersfield); map<string, pluginclassloader> loaders0 = (map<string, pluginclassloader>) loadersfield.get(new linkedhashmap<string, pluginclassloader>()); loaders0.put(description.getname(), bcl); loadersfield.set(map.class,loaders0);
this statement
loadersfield.set(map.class,loaders0); means trying set field loader of object map.class value loaders0.
what want call on instance of class has field loader.
loadersfield.set(yourinstance, loader0); here's correct usage of methods:
public class myclass { public map<string, classloader> loader = new linkedhashmap<string, classloader>(); public static void main(string[] args) { try { field field = myclass.class.getfield("loader"); myclass instance = new myclass(); map<string, classloader> loader = (map<string, classloader>) field.get(instance); system.out.println(loader.size()); // prints 0 map<string, classloader> newloader = new linkedhashmap<string, classloader>(); newloader.put("adsas", null); field.set(instance, newloader); loader = (map<string, classloader>) field.get(instance); system.out.println(loader.size()); // prints 1 } catch (exception e) { // } } } this class has field loader, can , set above.
Comments
Post a Comment