第二百一十二节 Java反射 - Java构造函数反射

news2025/5/17 6:35:18

Java反射 - Java构造函数反射

以下四种方法来自 Class 类获取有关构造函数的信息:

Constructor[] getConstructors()
Constructor[]  getDeclaredConstructors()
Constructor<T> getConstructor(Class...  parameterTypes)
Constructor<T> getDeclaredConstructor(Class...  parameterTypes)

getConstructors()方法返回当前和超类的所有公共构造函数。

getDeclaredConstructors()方法返回当前类的所有声明的构造函数。

getConstructor(Class ... parameterTypes)和getDeclaredConstructor(Class ... parameterTypes)通过参数类型获取构造函数对象。

例子

以下代码显示了如何对构造函数执行反射。

import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;
import java.util.ArrayList;

class MyClass<T> {

  public MyClass(int i, int j, String s) {

  }

  public MyClass(T t) {

  }

  public int getInt(String a) {
    return 0;
  }
}

public class Main {
  public static void main(String[] args) {
    Class<MyClass> c = MyClass.class;

    System.out.println("Constructors for " + c.getName());
    Constructor[] constructors = c.getConstructors();
    ArrayList<String> constructDescList = getConstructorsDesciption(constructors);
    for (String desc : constructDescList) {
      System.out.println(desc);
    }
  }

  public static ArrayList<String> getConstructorsDesciption(
      Constructor[] constructors) {
    ArrayList<String> constructorList = new ArrayList<>();
    for (Constructor constructor : constructors) {
      String modifiers = getModifiers(constructor);

      String constructorName = constructor.getName();

      constructorList.add(modifiers + "  " + constructorName + "("
          + getParameters(constructor) + ") " + getExceptionList(constructor));
    }
    return constructorList;
  }
  public static ArrayList<String> getParameters(Executable exec) {
    Parameter[] parms = exec.getParameters();
    ArrayList<String> parmList = new ArrayList<>();
    for (int i = 0; i < parms.length; i++) {

      int mod = parms[i].getModifiers() & Modifier.parameterModifiers();
      String modifiers = Modifier.toString(mod);
      String parmType = parms[i].getType().getSimpleName();
      String parmName = parms[i].getName();
      String temp = modifiers + "  " + parmType + "  " + parmName;
      if (temp.trim().length() == 0) {
        continue;
      }
      parmList.add(temp.trim());
    }
    return parmList;
  }

  public static ArrayList<String> getExceptionList(Executable exec) {
    ArrayList<String> exceptionList = new ArrayList<>();
    for (Class<?> c : exec.getExceptionTypes()) {
      exceptionList.add(c.getSimpleName());
    }
    return exceptionList;
  }

  public static String getModifiers(Executable exec) {
    int mod = exec.getModifiers();
    if (exec instanceof Method) {
      mod = mod & Modifier.methodModifiers();
    } else if (exec instanceof Constructor) {
      mod = mod & Modifier.constructorModifiers();
    }
    return Modifier.toString(mod);
  }
}

上面的代码生成以下结果。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache SeaTunnel 2.3.7发布:全新支持大型语言模型数据转换

我们欣喜地宣布&#xff0c;Apache SeaTunnel 2.3.7 版本现已正式发布&#xff01;作为一个广受欢迎的下一代开源数据集成工具&#xff0c;Apache SeaTunnel 一直致力于为用户提供更加灵活、高效的数据同步和集成能力。此次版本更新不仅引入了如 LLM&#xff08;大型语言模型&a…

python-pptx - Python 操作 PPT 幻灯片

文章目录 一、关于 python-pptx设计哲学功能支持 二、安装三、入门1、你好世界&#xff01;例子2、Bullet 幻灯片示例3、add_textbox()示例4、add_picture()示例5、add_shape()示例6、add_table()示例7、从演示文稿中的幻灯片中提取所有文本 四、使用演示文稿1、打开演示文稿2、…

心觉:潜意识精准显化(二)赚不到钱的困境根源是什么

上一篇文章我讲到了关于潜意识精准显化系列文章&#xff0c;我会以财富的精准显化为例讲解 财富广义的讲有很多&#xff0c;智慧&#xff0c;能力&#xff0c;人生阅历&#xff0c;苦难&#xff0c;高质量的人际关系&#xff0c;金钱等等都算财富 这么多财富类型&#xff0c;…

Pinia 使用(一分钟了解)

Pinia 使用&#xff08;一分钟了解&#xff09; Pinia 官网地址&#xff1a;Pinia 官方文档 文章目录 Pinia 使用&#xff08;一分钟了解&#xff09;一、Pinia是什么二、Vue中如何使用Pinia1. 安装Pinia2. 创建Pinia实例3. 定义一个Store4. 在组件中使用Store5. 模块化和插件 …

C++红黑树的底层原理及其实现原理和实现

小编在学习完红黑树之后&#xff0c;发现红黑树的实现相对于AVL树来说会简单一点&#xff0c;并且大家在学了C中的set和map容器之后&#xff0c;会明白set和map的容器的底层就是运用的红黑树&#xff0c;因为相对于AVL树&#xff0c;红黑树的旋转次数会大大减少&#xff0c;并且…

MySQL笔记(大斌)

乐观锁和悲观锁是什么&#xff1f; 数据库中的并发控制是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观锁和悲观锁是并发控制主要采用的技术手段。 悲观锁&#xff1a;假定会发生并发冲突&#xff0c;会对操作的数据进行加锁&a…

好的渲染农场应该具备哪些功能?

对于3D艺术家和工作室来说&#xff0c;渲染往往是制作过程中最耗时的部分。这一关键阶段需要强大的计算资源和高效的工作流程&#xff0c;以确保生产时间表得以满足。一个好的渲染农场对于提高生产力和确保项目在不牺牲质量的情况下按时完成至关重要。随着对详细3D视觉效果的需…

UEFI——PCD的简单使用

一、PCD的定义及概念 在UEFI固件接口中&#xff0c;PCD&#xff08;Platform Configuration Database&#xff09;是一个用于存储和访问平台特定配置信息的机制。PCD允许UEFI驱动程序和应用程序在运行时获取和设置平台相关的参数&#xff0c;而无需硬编码这些值。PCD变量可以被…

计算机毕业设计推荐-基于Java的网上电子图书管理系统【Java-python-大数据定制】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于Java的网上电子图书管理…

魏牌蓝山智驾版,长城的智能化「大反攻」

‍作者 |老缅 编辑 |德新 8月下旬&#xff0c;魏牌全新蓝山上市&#xff0c;定位「长城首款NOA智能六座旗舰SUV」。 新车分智驾Max和智驾Ultra两个版本&#xff0c;售价分别为29.98万元和32.68万元。 魏建军为蓝山的上市&#xff0c;时隔6年再度回到了发布会的舞台&#xff…

时序预测基础模型又中顶会!真心建议各位往这个方向发论文

时序领域又有新突破啦&#xff01;谷歌最新提出TimesFM&#xff0c;仅需200M参数&#xff0c;零样本预测性能超越有监督&#xff01;成功入选ICML 2024&#xff01; TimesFM是一种全新的时间序列通用基础模型&#xff0c;这类模型相比传统时序模型&#xff0c;拥有整合和利用广…

HDLC 和 PPP 原理与配置

HDLC简介 HDLC协议是一种通用的协议&#xff0c;工作在OSI参考模型的数据链路层。数据报文加上头开销和尾开销后封装成HDLC帧。 HDLC具有以下特点&#xff1a; •HDLC协议只支持点到点链路&#xff0c;不支持点到多点。 •HDLC协议不支持IP地址协商&#xff0c;不支持认证。 •…

【数据结构-二维前缀和】【列维护优化】力扣3212. 统计 X 和 Y 频数相等的子矩阵数量

给你一个二维字符矩阵 grid&#xff0c;其中 grid[i][j] 可能是 ‘X’、‘Y’ 或 ‘.’&#xff0c;返回满足以下条件的 子矩阵 数量&#xff1a; 包含 grid[0][0] ‘X’ 和 ‘Y’ 的频数相等。 至少包含一个 ‘X’。 示例 1&#xff1a; 输入&#xff1a; grid [[“X”,“…

用相图分析 bbr,inflight 守恒的收敛速度

以下的代码绘制了 bbr 的收敛相图&#xff1a; #!/opt/homebrew/bin/python3import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeintdef model(vars, t, C, g):x, y varsdxdt C * (g * x) / (g * x y) - xdydt C * (g * y) / (g * y x)…

读懂以太坊源码(1)-目录结构说明

要了解一个软件工程项目的代码&#xff0c;必须从代码的目录结构入手&#xff0c;从而大致了解软件实现的功能模块&#xff0c;使用了哪些相关的技术&#xff0c;大概的框架是怎么样的&#xff1f; 源码网址&#xff1a;https://github.com/ethereum/go-ethereum 以下是以太坊…

如何提升网站在Google的排名?

事实上&#xff0c;常规提升排名的方法无非就那么几种&#xff0c;关键词优化&#xff0c;高质量内容&#xff0c;网站结构优化&#xff0c;外链&#xff0c;确保网站没问题&#xff0c;这些都是常规的提升排名的方法&#xff0c;只能说没什么特别的&#xff0c;而除了这些常规…

流量焦虑?随身WiFi来救场!2024好的随身WiFi怎么挑,看这一篇文章就够了!包教会你识别随身WiFi哪个好!

相信大家买随身WiFi肯定是想要网速快&#xff0c;并且多用几年&#xff0c;那么在全网铺天盖地的广告、水军、好评的情况下&#xff0c;随身WiFi的品质好坏&#xff0c;我们该如何辨别呢&#xff1f; 主要看三个指标就能轻松分别&#xff0c;记得先收藏再观看&#xff01;一篇…

HIS系统|HIS系统开发源码

在数字医疗时代&#xff0c;医院信息系统&#xff08;HIS&#xff09;的开发至关重要。本文将深入探讨在开发HIS系统时需要关注的主要事项&#xff0c;从系统架构到数据安全&#xff0c;为医疗机构提供实用的开发指南。 1、需求分析与系统规划 在开发HIS系统的初期&#xff0c…

rknntoolkitlite2环境搭建

目录 前言 0、要下载的软件包 一、环境搭建步骤 1.1 安装Miniconda 1.2创建RKNN虚拟环境 1.3 安装rknntoolkitlite2软件包 1.4 安装opencv 前言 RKNN Toolkit Lite2 工具支持运行在 RK3568: Debian10/Debian11&#xff08;aarch64&#xff09;、Ubuntu20/22&#xff08;…

【微信小程序】自定义 tabBar

一、自定义 tabBar 1、案例效果 首先来看一下页面演示效果&#xff0c;页面中有下方标签栏是自定义 tabBar。自定义 tabBar 可以让开发者更加灵活地设置 tabBar 样式&#xff0c;以满足更多个性化的场景。 在此案例中&#xff0c;用到的主要知识点如下&#xff1a; 自定义组…