简体   繁体   中英

Get hashmap using reflection Java, code error

I am attempting to load the corresponding hashmap using reflection. However I get a field not found exception. Please let me know what you think the issue is. Thanks

//Find the map
        HashMap<String, Matches> map = null;

        //Reflection to find the appropriate map
        try {
            Field field = Field.class.getField(mapName); //exception (mapname = lookupHashmap) this class has a lookupHashmap declared)
            try {

                //Set the map
                map = (HashMap<String, Matches>)field.get(this); //Not sure if this is correct

            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Stack trace

java.lang.NoSuchFieldException: majorFieldLookup
    at java.lang.Class.getField(Class.java:1522)
    at MatchingGraph.getResultsForMap(MatchingGraph.java:245)
    at MatchingGraph.getmajorFieldMatches(MatchingGraph.java:196)
    at Matcher.findMatches(Matcher.java:95)
    at Tester.main(Tester.java:27)

You do not want Field.class.getField(mapName);

You want to use whatever class it is you have the map on, call it 'MyClass'

Field field = MyClass.class.getDeclaredField(mapName);

Edit: changed to getDeclaredField(...) from getField(..) because the field was private.

@Rolfl solved your problem i guess.

And I'm suggesting Apache Commons BeanUtils .

And use the method

BeanUtils.copyProperties(source, target);

http://commons.apache.org/proper/commons-beanutils/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM