广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >反射可以做什么
  • 166
分享到

反射可以做什么

2024-04-02 19:04:59 166人浏览 泡泡鱼
摘要

反射可以做什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Java中,想要运行时操作对象的方法、属性,其中有效的手段,就有反射。这也是

反射可以做什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在Java中,想要运行时操作对象的方法、属性,其中有效的手段,就有反射。这也是框架最常使用的手段,因为框架在编译时并不知晓系统中有哪些类会被使用。

Java中对象的类型信息在运行时由Class对象表示,Class对象是伴随类加载而实例化产生的,而反射的实现就围绕着Class对象。

有很多种方式可以获取类的Class对象,包括:

Class<Object> c1 = Object.class; Class<?> c2 = Class.forName("java.lang.Object"); Class<?> c3 = new Object().getClass();

反射可以做什么?

1. 实例化对象

对象的实例化,可以通过new关键字直接实例化,也可以通过反射,例如:

class.newInstance()  class.getConstructor(Class<?>... parameterTypes).newInstance(Object ... initargs)

为什么需要用反射来进行对象实例化?

有不能使用new关键字直接实例化对象的场景,例如:spring容器管理的Bean,只能通过类的全限定名加载类,然后反射实例化。

在不想使用new关键字的场景,目的是为了简化编程,使代码美观,可能大家经常看到类似的用法,例如:

public static <T> T parseObject(String text, Class<T> clazz) {   return parseObject(text, clazz, new Feature[0]); }
 public static <S, D> D map(S source, Class<D> destinationClass){   return mapper.map(source, destinationClass); }

2. 筛选合适的类

实际开发中,经常会有这种需要,如果类有某某特征,就进行某某操作。在Spring进行扫描的时候,我们会通过过滤器,来精细化控制bean的生成,包括:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 根据isInstance(Object obj)判断是否实现某某接口或者继承特殊的父类;

  3. 根据isAnnotationPresent(Class  annotationClass)判断是否被注解标记。

3. 方法调用

有些场景不能或者不合适直接调用方法,例如:我们处理Http请求,需要从URI映射到方法调用,如果我们能够穷举所有的URL到对象方法的映射关系,那么也没问题,但是无数的if条件判断,显然不是明智的选择。

通常我们先会获取资源对象,然后反射调用对象的方法。

Method.invoke(Object obj, Object... args)

如何获取对象的方法对象,也就是Method对象呢?Class类提供了以下实现:

Method[] getMethods(); Method[] getDeclaredMethods(); Method getMethod(String name, Class<?>... parameterTypes); Method getDeclaredMethod(String name, Class<?>... parameterTypes);

这些方法可以分为两类:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 方法签名中带有Declared的,会在当前类的所有方法中查找,但不会遍历父类。

  3. 不带Declared的会遍历所有父类,但只会查找public方法。

推荐使用工具类:org.apache.commons.lang3.reflect.MethodUtils  此类中包含遍历所有父类查找方法、当前类查找public方法或者反射执行方法的便捷操作。

4. 属性操作

Class.getFields(), Class.getField(String),  Class.getDeclaredFields(), Class.getDeclaredField(String)

命名规则同方法,推荐使用工具类:org.apache.commons.lang3.FieldUtils,进行读取或者赋值操作。

反射进行赋值有几点需要注意:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 如果不为public类型,那么设置字段前必须通过Field.setAccessible(true)方法进行访问权限设置,不然会抛出异常:IllegalAccessException  。

  3. 如果字段为static类型,那么通过set方法进行赋值时,会忽略obj对象,因为静态字段属于类。

  4. 如果字段为final类型,不管是public还是  private,那么用set方法赋值时,只有setAccessible进行访问权限设置后,才能正确调用,不然会报异常:IllegalAccessException。但是对final字段进行set方法赋值时,尽管方法正常调用,但是并不会改变fianl字段的值。

  5. 如果字段为final static 类型,那么进行set方法赋值时,总会抛出IllegalAccessException异常。

关于反射可以做什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网node.js频道了解更多相关知识。

--结束END--

本文标题: 反射可以做什么

本文链接: https://www.lsjlt.com/news/83426.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 反射可以做什么
    反射可以做什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Java中,想要运行时操作对象的方法、属性,其中有效的手段,就有反射。这也是...
    99+
    2022-10-19
  • Java反射能做什么
    本篇内容主要讲解“Java反射能做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java反射能做什么”吧!一、 什么是反射用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未...
    99+
    2023-06-17
  • mariadb dockerfile 可以做目录映射
    [root@mytest mariadb10.3]# cat Dockerfile FROM centosMAINTAINER xingzhenxiang 20190610ADD MariaDB.repo ...
    99+
    2022-10-18
  • Python可以做什么?
    Python可以做什么? 1)网站后端程序员:使用它单间网站,后台服务比较容易维护。如:Gmail、Youtube、知乎、豆瓣  2)自动化运维:自动化处理大量的运维任务 3)数据分析师:快速开发快速验证,分析数据得到...
    99+
    2023-01-31
    做什么 Python
  • java可以做什么?
    正在准备入行IT,入行java的同学可能对java的应用有些疑虑,java可以做什么?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。java可以做什么?大数据开发大数据领域是近年来常谈的领域,现在社会是一个高速发展的社会,科技发达、生...
    99+
    2016-01-14
    java教程 java
  • JavaScript可以做什么
    本篇内容介绍了“JavaScript可以做什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!学习前端的同学...
    99+
    2022-10-19
  • java可以做什么
    java的作用:主流的大数据框架Hadoop的应用主要用java开发。Android应用、Web应用程序都可以使用java开发。java编写游戏,比如比较著名的游戏《我的世界》就是用java编写的。可以编写系统,比如最常见办公系统,学校的各...
    99+
    2022-10-04
  • golang 可以做什么
    近年来,Golang(或称Go语言)在编程领域一直备受关注。作为一门轻量级的面向并发编程的语言,Golang拥有诸多优势,近些年来已经逐渐成为云计算和大数据分析等相关领域的首选语言。那么,Golang究竟能够做什么?本文将为大家详细介绍。云...
    99+
    2023-05-14
  • dedecms可以做什么
    Dedecms是一个功能强大且灵活的内容管理系统,可以用于搭建各种类型的网站:1、新闻门户网站,提供了完善的新闻发布和管理功能;2、企业网站;3、电子商务网站;4、博客和个人网站;5、论坛社区;6、用于搭建学校、培训机构等教育机构的官方网站...
    99+
    2023-08-03
  • 学HTML5可以做什么
    本篇内容主要讲解“学HTML5可以做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学HTML5可以做什么”吧!HTML5能做什么?第一:最近火爆的微信小程序...
    99+
    2022-10-18
  • 学python可以做什么
    这篇文章主要讲解了“学python可以做什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学python可以做什么”吧!一、智能裁切图片在学习工作中我们都会遇到裁剪图片问题,想裁剪图片来保留...
    99+
    2023-06-27
  • php8可以做什么项目
    可以做的项目有网站开发、内容管理系统、电子商务平台、社交网络、应用程序开发等等。详细介绍:1、网站开发,PHP8在网站开发方面有着广泛的应用,无论是个人博客、企业网站还是电子商务平台,PHP8都能够提供强大的功能和灵活的开发工具,PHP8的...
    99+
    2023-10-22
    PHP8
  • C语言可以做什么
    本篇内容主要讲解“C语言可以做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言可以做什么”吧!C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软...
    99+
    2023-06-03
  • 学Linux后可以做什么
    本篇内容主要讲解“学Linux后可以做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学Linux后可以做什么”吧!方向一:运维这应该是很多 Linux 从业者给大家的形象吧,很多人也把我当作...
    99+
    2023-06-05
  • VBS可以用来做什么
    这篇文章给大家分享的是有关VBS可以用来做什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 计算   2. 处理文件和文件夹 3. 管理Windows 4.&n...
    99+
    2023-06-08
  • html5可以用来做什么
    小编给大家分享一下html5可以用来做什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html5能做的:1、微信小程序,在开发的过程,就会应用到HTML5的技术...
    99+
    2023-06-14
  • redis可以用来做什么
    这篇文章将为大家详细讲解有关redis可以用来做什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类...
    99+
    2022-10-18
  • Css可以用来做什么
    本篇内容主要讲解“Css可以用来做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Css可以用来做什么”吧! css可以用来表现H...
    99+
    2022-10-19
  • 学习nodejs可以做什么
    本篇内容主要讲解“学习nodejs可以做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学习nodejs可以做什么”吧! node...
    99+
    2022-10-19
  • JavaScript可以用来做什么
    本篇内容主要讲解“JavaScript可以用来做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript可以用来做什么”吧! ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作