1.反射获取返回类型
java.lang.reflect.Method.getReturnType()方法返回一个Class对象,该对象表示此Method对象的方法的返回类型。
class Person {
private String name;
private String gender;
private String birthday;
private Person() {
}
public Person(String name){
this.name = name;
}
public Person(String name, String gender, String birthday) {
this.name = name;
this.gender = gender;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
private void secrete(String content) {
System.out.println("Show secrete is : " + content);
}
protected void sayHello(String msg) {
System.out.println("hello," + msg);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("demo2.Person");
Method method = clazz.getDeclaredMethod("getName");
Class returnType = method.getReturnType();
System.out.println(returnType.toGenericString());
}
}
运行结果:
public final class java.lang.String
2.反射获取访问修饰符
Field或者Method的getModifiers()方法返回int类型值表示该字段或者方法的修饰符。
其中,该修饰符是java.lang.reflect.Modifier的静态属性。
对应表如下:
| 名字 | 常量值 |
|---|---|
| PUBLIC | 1 |
| PRIVATE | 2 |
| PROTECTED | 4 |
| STATIC | 8 |
| FINAL | 16 |
| SYNCHRONIZED | 32 |
| VOLATILE | 64 |
| TRANSIENT | 128 |
| NATIVE | 256 |
| INTERFACE | 512 |
| ABSTRACT | 1024 |
| STRICT | 2048 |
class Person {
private String name;
private String gender;
private String birthday;
private Person() {
}
public Person(String name){
this.name = name;
}
public Person(String name, String gender, String birthday) {
this.name = name;
this.gender = gender;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
private void secrete(String content) {
System.out.println("Show secrete is : " + content);
}
protected void sayHello(String msg) {
System.out.println("hello," + msg);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("demo2.Person");
Method method = clazz.getDeclaredMethod("getName");
int modifier = method.getModifiers();
System.out.println(modifier);
System.out.println(modifier == Modifier.PUBLIC);
}
}
运行结果:
1
true
3.反射获取注解
java.lang.reflect.AccessibleObject.getAnnotations()方法返回此元素上存在的所有注解。
class Person {
private String name;
private String gender;
private String birthday;
private Person() {
}
public Person(String name){
this.name = name;
}
public Person(String name, String gender, String birthday) {
this.name = name;
this.gender = gender;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
private void secrete(String content) {
System.out.println("Show secrete is : " + content);
}
@Deprecated
protected void sayHello(String msg) {
System.out.println("hello," + msg);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("demo2.Person");
Method method = clazz.getDeclaredMethod("sayHello",String.class);
System.out.println(method.toGenericString());
Annotation[] annotations = method.getAnnotations();
for(Annotation annotation: annotations){
System.out.println(annotation.toString());
}
}
}
运行结果:
protected void demo2.Person.sayHello(java.lang.String)
@java.lang.Deprecated()