Java 反射实例

目录结构

这里写图片描述

ReflectionTest.java

package com.guo.base;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectionTest {
    private Class<User> userClass;

    {
        userClass = getClass(1);
        System.out.println(
                Modifier.toString(userClass.getModifiers()) + " class " + userClass.getSimpleName() + "{\n" + "");
    }

    public static void main(String[] args) {
        ReflectionTest test = new ReflectionTest();

        test.fields();
        test.constructors();
        test.methods();
        System.out.println("}");
    }

    @SuppressWarnings("unchecked")
    private Class<User> getClass(int key) {
        switch (key) {
        case 1:
            return User.class;
        case 2:
            try {
                return (Class<User>) Class.forName("com.guo.base.User");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                return null;
            }
        case 3:
            User user = new User("zhangsan", "123456");
            return (Class<User>) user.getClass();

        default:
            return null;
        }
    }

    public void fields() {
        Field[] fields = getFields(Member.DECLARED);
        for (Field field : fields) {
            printField(field);
        }
        System.out.println();
    }

    private void printField(Field field) {
        System.out.print("    " + Modifier.toString(field.getModifiers())); // 修饰符
        int index = field.getType().toString().lastIndexOf(".") + 1;
        System.out.print(" " + field.getType().toString().substring(index));
        System.out.println(" " + field.getName() + ";");
    }

//userClass.getSuperClass();
    private Field[] getFields(int declared) {
        switch (declared) {
        case Member.DECLARED: // private和public修饰,不包括父类
            return userClass.getDeclaredFields();
        case Member.PUBLIC: // only public修饰,包括父类
            return userClass.getFields();
        default:
            return null;
        }
    }

    public void constructors() {
        Constructor<?>[] constructors = getConstructors(Member.DECLARED);
        for (Constructor<?> constructor : constructors) {
            printContructor(constructor);
        }
    }

    private Constructor<?>[] getConstructors(int declared) {

        switch (declared) {
        case Member.DECLARED:
            return userClass.getDeclaredConstructors();
        case Member.PUBLIC:
            return userClass.getConstructors();
        default:
            return null;
        }
    }

    private void printContructor(Constructor<?> constructor) {
        System.out.print("    " + Modifier.toString(constructor.getModifiers()));
        System.out.print(" " + constructor.getName());
        printParameters(constructor.getParameterTypes());
        printExceptionTypes(constructor.getExceptionTypes());
        System.out.println();
    }

    public void methods() {
        Method[] methods = userClass.getMethods();
        for (Method method : methods) {
            printMethod(method);
        }
    }

    private void printMethod(Method method) {
        System.out.print("    " + Modifier.toString(method.getModifiers()));
        System.out.print(" " + method.getReturnType().getSimpleName());
        System.out.print(" " + method.getName());
        printParameters(method.getParameterTypes());
        printExceptionTypes(method.getExceptionTypes());
        System.out.println();
    }

    // 打印参数列表
    private void printParameters(Class<?>[] classes) {
        if (classes == null || classes.length == 0) {
            System.out.print("() ");
            return;
        }

        System.out.print("(");
        for (int i = 0; i < classes.length; i++) {
            if (i < classes.length - 1) {
                System.out.print(classes[i].getSimpleName() + " args" + i + ", ");
            } else {
                System.out.print(classes[i].getSimpleName() + " args" + i);
            }
        }

        System.out.print(") ");
    }

    // 打印throws异常
    private void printExceptionTypes(Class<?>[] exceptionTypes) {
        if (exceptionTypes == null || exceptionTypes.length == 0) {
            System.out.println("{ \n\t...\n    }");
            return;
        }

        System.out.print("throws ");
        for (Class<?> class1 : exceptionTypes) {
            System.out.print(class1.getSimpleName() + " ");
        }

        System.out.println("{ \n\t...\n    }");
    }

}

User.java

package com.guo.base;

public class User {
    private String username;
    private String password;

    @SuppressWarnings("unused")
    private User() {
        super();
    }

    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((password == null) ? 0 : password.hashCode());
        result = prime * result + ((username == null) ? 0 : username.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (password == null) {
            if (other.password != null)
                return false;
        } else if (!password.equals(other.password))
            return false;
        if (username == null) {
            if (other.username != null)
                return false;
        } else if (!username.equals(other.username))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}

控制台输出结果

这里写图片描述

Java 反射实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值