0

これは、フィールド値と注釈値を取得するための私のコードです。値をマップに配置しましたが、問題はマップにある$thisことです。

Map doc = null;
        String kind = null;
        Class classObj = obj.getClass();
        Annotation[] annotations = classObj.getAnnotations();
        for (Annotation annotation : annotations) {
                Entity entityAnnotation = (Entity)annotation; 
                kind = entityAnnotation.name();
                if (entityAnnotation != null){
                        if (doc == null){
                            doc = new LinkedHashMap();
                        }
                        Field[] fields = classObj.getDeclaredFields();
                        for (Field field : fields){
                                annotations = field.getDeclaredAnnotations();
                                String value = null;
                                String fieldName = field.getName();
                                try {
                                        boolean access = field.isAccessible();
                                        field.setAccessible(true);
                                        Object fieldValue = field.get(obj); 
                                        doc.put(fieldName, fieldValue);
                                        field.setAccessible(access);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }                               
                                // Process fields with annotation
                                for(Annotation fieldAnnotation : annotations){
                                    if (annotation instanceof Id){
                                        Id idAnnotation = (Id) fieldAnnotation;
                                        log.info("Field name="+fieldName+" "+ value + " Annotation value: " + idAnnotation.value()); 
                                        doc.put("_id", value);
                                    }                                   
                                }
                        }                               
                }
        }

テスト出力:

Key=id value=id1
Key=name value=Eli
Key=age value=25
Key=this$0 value=org.goo.AnnotationTest@7f5227
4

2 に答える 2

1

フィールドthis$0は外部クラスへの参照です。

これを避けたい場合は、クラスを作成してくださいstatic。私見では、ネストされたクラスを可能な限り静的にする必要があります。これは、パフォーマンスのためですが、ほとんどの場合、わかりやすくするためです。これがオプションでない場合は、そのフィールドを明示的に無視できます。

ところで:というフィールドを作成すると、代わりにthis$0フィールドthis$$0orthis$$$0またはthis$$$$0etcが使用されます。

于 2012-11-14T09:00:33.883 に答える
0

クラス変数を取得して Map に格納するために使用できます。Field[] fields = YourClassName.class.getFields();

于 2012-11-14T09:24:04.163 に答える