import java.io.Serializable ;
import java.lang.annotation.Annotation ;
import java.lang.reflect.Field ;
import java.lang.reflect.InvocationTargetException ;
import java.lang.reflect.Method ;
import java.lang.reflect.Modifier ;
@Deprecated
private static final long serialVersionUID = 1L;
return id;
}
public void setId
( Long id
) { this .id = id;
}
return nome;
}
public void setNome
( String nome
) { this .nome = nome;
}
}
class TestMainClass {
ObjetoTesteReflection obj = new ObjetoTesteReflection( ) ;
obj.setId ( 13L) ;
obj.setNome ( "Objeto para testes." ) ;
metodoDeTeste( obj) ;
}
// Pegando a classe do objeto a manipular
Class<?> clazz = obj.getClass ( ) ;
System .
out .
println ( "Classe:" ) ; System .
out .
println ( "Nome: " + clazz.
getName ( ) ) ; System .
out .
println ( "Anotações: " ) ; System .
out .
println ( "\t Nome: " + a.
getClass ( ) .
getName ( ) ) ; }
System .
out .
println ( "Atributos:" ) ;
// Printando os atributos dos atributos da classe na tela
for ( Field field
: clazz.
getDeclaredFields ( ) ) { System .
out .
print ( " " + field.
getType ( ) .
getName ( ) ) ; System .
out .
println ( " " + field.
getName ( ) ) ;
// Liberando acesso ao valor do atributo
// field.setAccessible(true);
// System.out.println(" = " + field.get(obj));
// field.setAccessible(false);
}
System .
out .
println ( "Métodos:" ) ;
for ( Method m
: clazz.
getMethods ( ) ) { System .
out .
print ( " " + m.
getName ( ) ) ; System .
out .
print ( " " + m.
getName ( ) ) ;
// Buscando o tipo dos parâmetros
Class<?> [ ] params = m.getParameterTypes ( ) ;
// Verificando se é um método get (não precisamos aumentar a
// complexidade do exemplo)
if ( m.getName ( ) .startsWith ( "get" ) ) {
// No nosso caso sabemos que o método não recebe parâmetros
// Também existe m.invoke(Object objeto,Object... args)
System .
out .
println ( " = " + m.
invoke ( obj
) ) ; } else {
}
}
}
}
aW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwppbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwoKQERlcHJlY2F0ZWQKY2xhc3MgT2JqZXRvVGVzdGVSZWZsZWN0aW9uIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKCglwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKCglwcml2YXRlIExvbmcgaWQ7Cglwcml2YXRlIFN0cmluZyBub21lOwoKCXB1YmxpYyBMb25nIGdldElkKCkgewoJCXJldHVybiBpZDsKCX0KCglwdWJsaWMgdm9pZCBzZXRJZChMb25nIGlkKSB7CgkJdGhpcy5pZCA9IGlkOwoJfQoKCXB1YmxpYyBTdHJpbmcgZ2V0Tm9tZSgpIHsKCQlyZXR1cm4gbm9tZTsKCX0KCglwdWJsaWMgdm9pZCBzZXROb21lKFN0cmluZyBub21lKSB7CgkJdGhpcy5ub21lID0gbm9tZTsKCX0KfQoKY2xhc3MgVGVzdE1haW5DbGFzcyB7CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwKCQkJSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgU2VjdXJpdHlFeGNlcHRpb24sCgkJCUludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gewoKCQlPYmpldG9UZXN0ZVJlZmxlY3Rpb24gb2JqID0gbmV3IE9iamV0b1Rlc3RlUmVmbGVjdGlvbigpOwoKCQlvYmouc2V0SWQoMTNMKTsKCQlvYmouc2V0Tm9tZSgiT2JqZXRvIHBhcmEgdGVzdGVzLiIpOwoKCQltZXRvZG9EZVRlc3RlKG9iaik7CgoJfQoKCXByaXZhdGUgc3RhdGljIHZvaWQgbWV0b2RvRGVUZXN0ZShPYmplY3Qgb2JqKSB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24sCgkJCUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwKCQkJSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB7CgoJCS8vIFBlZ2FuZG8gYSBjbGFzc2UgZG8gb2JqZXRvIGEgbWFuaXB1bGFyCgkJQ2xhc3M8Pz4gY2xhenogPSBvYmouZ2V0Q2xhc3MoKTsKCgkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2U6Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJOb21lOiAiICsgY2xhenouZ2V0TmFtZSgpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFub3Rhw6fDtWVzOiAiKTsKCQlmb3IgKEFubm90YXRpb24gYSA6IGNsYXp6LmdldEFubm90YXRpb25zKCkpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdE5vbWU6ICIgKyBhLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKCQl9CgkJU3lzdGVtLm91dC5wcmludGxuKCk7CgoJCVN5c3RlbS5vdXQucHJpbnRsbigiQXRyaWJ1dG9zOiIpOwoKCQkvLyBQcmludGFuZG8gb3MgYXRyaWJ1dG9zIGRvcyBhdHJpYnV0b3MgZGEgY2xhc3NlIG5hIHRlbGEKCQlmb3IgKEZpZWxkIGZpZWxkIDogY2xhenouZ2V0RGVjbGFyZWRGaWVsZHMoKSkgewoJCQlTeXN0ZW0ub3V0LnByaW50KE1vZGlmaWVyLnRvU3RyaW5nKGZpZWxkLmdldE1vZGlmaWVycygpKSk7CgkJCVN5c3RlbS5vdXQucHJpbnQoIiAiICsgZmllbGQuZ2V0VHlwZSgpLmdldE5hbWUoKSk7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiICIgKyBmaWVsZC5nZXROYW1lKCkpOwoKCQkJLy8gTGliZXJhbmRvIGFjZXNzbyBhbyB2YWxvciBkbyBhdHJpYnV0bwovLwkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci8vCQkJU3lzdGVtLm91dC5wcmludGxuKCIgPSAiICsgZmllbGQuZ2V0KG9iaikpOwovLwkJCWZpZWxkLnNldEFjY2Vzc2libGUoZmFsc2UpOwoJCX0KCgkJU3lzdGVtLm91dC5wcmludGxuKCJNw6l0b2RvczoiKTsKCgkJZm9yIChNZXRob2QgbSA6IGNsYXp6LmdldE1ldGhvZHMoKSkgewoJCQlTeXN0ZW0ub3V0LnByaW50KE1vZGlmaWVyLnRvU3RyaW5nKG0uZ2V0TW9kaWZpZXJzKCkpKTsKCQkJU3lzdGVtLm91dC5wcmludCgiICIgKyBtLmdldE5hbWUoKSk7CgkJCVN5c3RlbS5vdXQucHJpbnQoIiAiICsgbS5nZXROYW1lKCkpOwoKCQkJLy8gQnVzY2FuZG8gbyB0aXBvIGRvcyBwYXLDom1ldHJvcwoJCQlDbGFzczw/PltdIHBhcmFtcyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKTsKCgkJCS8vIFZlcmlmaWNhbmRvIHNlIMOpIHVtIG3DqXRvZG8gZ2V0IChuw6NvIHByZWNpc2Ftb3MgYXVtZW50YXIgYQoJCQkvLyBjb21wbGV4aWRhZGUgZG8gZXhlbXBsbykKCQkJaWYgKG0uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImdldCIpKSB7CgkJCQkvLyBObyBub3NzbyBjYXNvIHNhYmVtb3MgcXVlIG8gbcOpdG9kbyBuw6NvIHJlY2ViZSBwYXLDom1ldHJvcwoJCQkJLy8gVGFtYsOpbSBleGlzdGUgbS5pbnZva2UoT2JqZWN0IG9iamV0byxPYmplY3QuLi4gYXJncykKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID0gIiArIG0uaW52b2tlKG9iaikpOwoJCQl9ZWxzZXsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCQl9CgkJfQoJfQp9
compilation info
Note: Main.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
stdout
Classe:
Nome: ObjetoTesteReflection
Anotações:
Nome: $Proxy3
Atributos:
private static final long serialVersionUID
private java.lang.Long id
private java.lang.String nome
Métodos:
public setId setId
public setNome setNome
public getNome getNome = Objeto para testes.
public getId getId = 13
public final native wait wait
public final wait wait
public final wait wait
public native hashCode hashCode
public final native getClass getClass = class ObjetoTesteReflection
public equals equals
public toString toString
public final native notify notify
public final native notifyAll notifyAll