0

我正在尝试使用反射加载相应的哈希图。但是我得到一个字段未找到异常。请让我知道您认为问题所在。谢谢

//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();
        }

堆栈跟踪

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)
4

2 回答 2

4

你不想要Field.class.getField(mapName);

您想使用地图所在的任何课程,称之为“MyClass”

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

编辑:从 getField(..) 更改为 getDeclaredField(...) 因为该字段是私有的。

于 2013-05-06T15:54:25.560 回答
0

我猜@Rolfl 解决了你的问题。

我建议使用 Apache Commons BeanUtils

并使用方法

BeanUtils.copyProperties(source, target);

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

于 2013-05-06T15:56:50.700 回答