2010-07-11 2 views
0

4 개의 속성, getter/setter 및 toString, equals 및 hashCode와 같은 일부 overided 메소드를 사용하여 간단한 Java bean을 jave 저장합니다. 모든 특성 위Java reflection (및 어노테이션) : bean.class가 비어 있습니다.

사용자 정의 주석입니다 : 내가 다른 방법

generateEntity(User.class); 

에 bean.class을 통과하면 ...

import java.lang.annotation.*; 
import java.lang.annotation.RetentionPolicy; 

@Target(ElementType.FIELD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface DAOProperty { 

    String name(); 
    String type(); 
    boolean identifier() default false; 

} 

/** The id. */ 
@DAOProperty(name = "id", type = "long", identifier = true) 
private long id; 

private static MEntity generateEntity(Class<?> bean) {...} 

및 디버그 그것은, 클래스 이름을 제외하고는 비어있는 것처럼 보입니다. 메소드, 주석 및 필드와 같은 모든 배열의 크기는 0입니다.

어디서 잘못 되었나요?

답변

0

getFields() 대신 beanClass.getDeclaredFields()을 사용하십시오. 그런 다음 배열을 반복하고 각각 Field을 호출하십시오. getAnnotations()

getFields() (및 이와 유사한 방법)은 공용 멤버 만 반환합니다.

어쨌든 자신 만의 주석 및 주석 프로세서를 만드는 대신 JPA를 사용하는 것이 어떻습니까?

+0

Odd, declaredFields도 디버거의 bean에서 llok이라도, 크기가 0 인 배열을 맹세 할 수는 있지만 어떻게 든 작동합니다. 감사합니다. Bozho. UAS를위한 excersise입니다. 주된 목적은 emf와 jet을 사용하여 코드 생성기를 구현하는 것입니다. – masche

0

클래스의 내부 필드를 보지 마십시오. 그들은 당신과 관련이 없습니다. 관심을 가져야 할 유일한 방법은 메소드의 반환 값입니다. java.lang.Class은 요청시 작성된 정보를 저장하기 위해 해당 필드를 사용합니다.

이 경우 런타임에 Class 객체의 필드를 보면 올바른 값 (적어도 항상은 아님)을 알 수 없습니다. 그러나 원하는 메서드의 반환 값을 검사하는 것은 올바른 값을 제공해야합니다.

관련 문제