Java..saber o tipo de um campo em tempo de execução

duvida tem como tem tempo de execução
eu saber que o campo dtNascimento seu tipo é Date …

se alguém puder me ajudar


class Cliente {

   private int id;
   private String nome;
   private Date dtNascimento;

tem sim…

boolean isDate = objetoQualquer instaceof java.util.Date;

se entendi bem sua pergunta

Ou vc utiliza o [b]instance of[b] ou atraves do nome da classe:

String s = new String();
Date d = new Date(); 
Object o = new Object();
ArrayList lst = new ArrayList();
HashMap hm = new HashMap();
		
System.out.println(s.getClass().getName());
System.out.println(d.getClass().getName());
System.out.println(o.getClass().getName());
System.out.println(lst.getClass().getName());
System.out.println(hm.getClass().getName());

///////////Saída no console/////////////////////

java.lang.String
java.util.Date
java.lang.Object
java.util.ArrayList
java.util.HashMap

agora vc pode verificar um objeto randomico assim

Object a = getObject(); Field[] campos = a.getClass().getDeclaredFields(); for (Field f : campos) { System.out.println("O campo " + f.getName() + " é do tipo " + f.getDeclaringClass()); }

desta forma vc descobre todos os campos de um objeto

fiz o seguinte abaixo mas não aparece o nome tipo do atibuto por exemplo
private Calendar birthDate;

queria que mostrasse Calendar

public class ImsUserImpl  {
	@Id
	@GeneratedValue
	@Column(name = "USER_ID")
	/** Identificador único */
	private Long id;
	@Column(nullable = false)
	/** Nome do usuário */
	private String name;
	@Column(nullable = false)
	@Column
	@Temporal(TemporalType.DATE)
	private Calendar birthDate;

abs

public static void main(String[] args) throws ClassNotFoundException {
		Class cls = Class.forName("br.com.User");
		Field[] campos = cls.getClass().getDeclaredFields();   
		for (Field f : campos) {   
		    System.out.println("O campo " + f.getName() + " é do tipo " + f.getDeclaringClass()+ " tipao ="+f.getModifiers());   
		}   
O campo ANNOTATION é do tipo class java.lang.Class tipao =26
O campo ENUM é do tipo class java.lang.Class tipao =26
O campo SYNTHETIC é do tipo class java.lang.Class tipao =26
O campo cachedConstructor é do tipo class java.lang.Class tipao =194
O campo newInstanceCallerCache é do tipo class java.lang.Class tipao =194
O campo name é do tipo class java.lang.Class tipao =130
O campo allPermDomain é do tipo class java.lang.Class tipao =10
O campo useCaches é do tipo class java.lang.Class tipao =10
O campo declaredFields é do tipo class java.lang.Class tipao =194
O campo publicFields é do tipo class java.lang.Class tipao =194
O campo declaredMethods é do tipo class java.lang.Class tipao =194
O campo publicMethods é do tipo class java.lang.Class tipao =194
O campo declaredConstructors é do tipo class java.lang.Class tipao =194
O campo publicConstructors é do tipo class java.lang.Class tipao =194
O campo declaredPublicFields é do tipo class java.lang.Class tipao =194
O campo declaredPublicMethods é do tipo class java.lang.Class tipao =194
O campo classRedefinedCount é do tipo class java.lang.Class tipao =194
O campo lastRedefinedCount é do tipo class java.lang.Class tipao =194
O campo genericInfo é do tipo class java.lang.Class tipao =130
O campo serialVersionUID é do tipo class java.lang.Class tipao =26
O campo serialPersistentFields é do tipo class java.lang.Class tipao =26
O campo reflectionFactory é do tipo class java.lang.Class tipao =10
O campo initted é do tipo class java.lang.Class tipao =10
O campo enumConstants é do tipo class java.lang.Class tipao =194
O campo enumConstantDirectory é do tipo class java.lang.Class tipao =194
O campo EMPTY_ANNOTATIONS_ARRAY é do tipo class java.lang.Class tipao =10
O campo annotations é do tipo class java.lang.Class tipao =130
O campo declaredAnnotations é do tipo class java.lang.Class tipao =130
O campo annotationType é do tipo class java.lang.Class tipao =2

tem razão… o correto seria getType()

[code]public class Temp {

public class ImsUserImpl  {  
    @Id
    @GeneratedValue
    @Column(name = "USER_ID")  
    /** Identificador único */  
    private Long id;  
    @Column(nullable = false)  
    /** Nome do usuário */  
    private String name;  
    @Column(nullable = false)
    @Temporal(TemporalType.DATE)  
    private Calendar birthDate;
}

public static void main(String[] args) {
	Field[] campos = ImsUserImpl.class.getDeclaredFields();
	for (Field f : campos)
		System.out.println(f.getName() + ".class == " + f.getType().getName());
	
}[/code]

resposta do console

id.class == java.lang.Long name.class == java.lang.String birthDate.class == java.util.Calendar

ahh mais uma coisa que notei agora

[quote=paribe]//... Class cls = Class.forName("br.com.User"); Field[] campos = cls.getClass().getDeclaredFields(); //<=== isso aqui não esta correto, vc ta analizando a classe Class //...[/quote]

Vc deveria fazer apenas cls.getDeclaredFields(); pois cls já é a classe que vc quer… e c vc faz cls.getClass() vai te retornar
a classe Class