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