Java中反射机制的使用场景

简介: Java中反射机制的使用场景

文章目录

1.反射

反射在平时的开发中很少用,但是在处理代码的灵活性上非常具有帮助,反射获取对应类的字节码,动态代理也利用了反射的机制。如spring中xml的配置模式,转载bean,springboot中在properties或者yml中配置属性转化为对应的实体。

2.反射的三种方式

新建一个User.

public class User {

   private String UserName;

   private int age;

   private String address;

}

2.1 通过new对象实现反射机制

User user = new User("elite",12,"XX");

     Class userClass = user.getClass();

       Constructor[] constructors = userClass.getConstructors();

       for(Constructor c:  constructors){

           User o = (User) c.newInstance("elite",12,"xx");

           System.out.println(o.showUserInfo());

       }

2.2 通过路径实现反射机制

  @Test

   public void Test2() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

       Class clazz= Class.forName("com.elite.java.reflection.User");

       System.out.println(clazz.getName());

       Constructor<User> constructor = clazz.getConstructor(new Class[]{String.class,Integer.class,String.class});

       User user = constructor.newInstance("elite2", 12, "xxxx");

       System.out.println(user.showUserInfo());

   }

2.3 通过类名实现反射机制

   @Test

   public void Test3() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

     

       Class clazz= User.class;

       System.out.println( clazz.getName());

       Constructor<User> constructor = clazz.getConstructor(new Class[]{String.class,Integer.class,String.class});

       User user = constructor.newInstance("elite3", 12, "xxxx");

       System.out.println(user.showUserInfo());

   }

3.利用反射减少代码量

实际开发中,特别是银行类支付参数串,大部分需要填补位置,填充0或者空格之类的。

比如金额字段,10位,两位小数,不足10位前面补充0填位。这个自定义注解,利用反射来实现想要的结果。

自定义注解

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

public @interface BankPayParams {

   //其他的可以自己定义

   int Length();

}

定义请求参数对象

/**

* 银行支付请求参数

*/

public class BankPayRqInfo {

   /**

    * 支付金额

    */

   @BankPayParams(Length = 10)

   public BigDecimal money;

}

组织参数测试

/**

    * 测试反射

    */

   @Test

   public void Test4() throws IllegalAccessException {

       //设置构造请求参数对象

       BankPayRqInfo rqInfo = new BankPayRqInfo(new BigDecimal("10.00"));

       String params = FormatParams(rqInfo);

       System.out.println(params);

   }

   private String FormatParams(BankPayRqInfo rqInfo) throws IllegalAccessException {

       StringBuilder sb = new StringBuilder();

       for(Field field:rqInfo.getClass().getDeclaredFields()){

           //获取字段对应的注解

           BankPayParams p = field.getDeclaredAnnotation(BankPayParams.class);

           if(p!=null){

               // 获取Field的值:

               Object value = field.get(rqInfo);

               // 如果值是String:

               if (value instanceof BigDecimal) {

                   String s = value.toString();

                   if (s.contains("."))  s = s.replace(".","");

                   int Length = p.Length();

                   String format = StringUtils.leftPad(s,Length,"0");

                   sb.append(format);

               }

           }

       }

       return sb.toString();

   }

相关文章
|
10天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
1月前
|
Java 程序员
深入理解Java异常处理机制
Java的异常处理是编程中的一块基石,它不仅保障了代码的健壮性,还提升了程序的可读性和可维护性。本文将深入浅出地探讨Java异常处理的核心概念、分类、处理策略以及最佳实践,旨在帮助读者建立正确的异常处理观念,提升编程效率和质量。
125 1
|
1月前
|
Java 开发者 UED
深入探索Java中的异常处理机制##
本文将带你深入了解Java语言中的异常处理机制,包括异常的分类、异常的捕获与处理、自定义异常的创建以及最佳实践。通过具体实例和代码演示,帮助你更好地理解和运用Java中的异常处理,提高程序的健壮性和可维护性。 ##
51 2
|
1月前
|
Java 开发者
Java中的异常处理机制深度剖析####
本文深入探讨了Java语言中异常处理的重要性、核心机制及其在实际编程中的应用策略,旨在帮助开发者更有效地编写健壮的代码。通过实例分析,揭示了try-catch-finally结构的最佳实践,以及如何利用自定义异常提升程序的可读性和维护性。此外,还简要介绍了Java 7引入的多异常捕获特性,为读者提供了一个全面而实用的异常处理指南。 ####
54 2
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
49 3
|
1月前
|
Java 程序员 UED
深入理解Java中的异常处理机制
本文旨在揭示Java异常处理的奥秘,从基础概念到高级应用,逐步引导读者掌握如何优雅地管理程序中的错误。我们将探讨异常类型、捕获流程,以及如何在代码中有效利用try-catch语句。通过实例分析,我们将展示异常处理在提升代码质量方面的关键作用。
46 3
|
30天前
|
Java API 开发者
深入理解Java中的异常处理机制
本文探讨了Java编程语言中异常处理的核心概念,包括异常类型、异常捕获与抛出、以及最佳实践。通过分析常见的异常场景和处理策略,旨在帮助开发者更好地理解和运用异常处理机制,提高代码的健壮性和可维护性。文章不仅涵盖了基本的try-catch结构,还深入讨论了自定义异常的创建与使用,以及finally块的重要性和应用。此外,还将介绍一些高级技巧,如多异常捕获和嵌套异常处理,为读者提供全面的技术指导。
91 0
|
3月前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
28 0
|
存储 SQL Java
Java反射读取注解信息
Java反射读取注解信息
76 0
|
JSON 安全 Java