IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> JAVA高级篇之Java Reflection详解 -> 正文阅读

[游戏开发]JAVA高级篇之Java Reflection详解

目录

概念

Java programming language and JVM modeling in core reflection

The components of core reflection, which include types in this package as well as?Class,?Package, and?Module, fundamentally present a JVM model of the entities in question rather than a Java programming language model. A Java compiler, such as?javac, translates Java source code into executable output that can be run on a JVM, primarily?class?files. Compilers for source languages other than Java can and do target the JVM as well.

The translation process, including from Java language sources, to executable output for the JVM is not a one-to-one mapping. Structures present in the source language may have no representation in the output and structures?not?present in the source language may be present in the output. The latter are called?synthetic?structures. Synthetic structures can include?methods,?fields,?parameters,?classes and interfaces. One particular kind of synthetic method is a?bridge method. It is possible a synthetic structure may not be marked as such. In particular, not all?class?file versions support marking a parameter as synthetic. A source language compiler generally has multiple ways to translate a source program into a?class?file representation. The translation may also depend on the version of the?class?file format being targeted as different?class?file versions have different capabilities and features. In some cases the modifiers present in the?class?file representation may differ from the modifiers on the originating element in the source language, including?final?on a?parameter?and?protected,?private, and?static?on?classes and interfaces.

Besides differences in structural representation between the source language and the JVM representation, core reflection also exposes runtime specific information. For example, the?class loaders?and?protection domains?of a?Class?are runtime concepts without a direct analogue in source code.

见原文:java.lang.reflect (Java SE 18 & JDK 18)

场景

????????Bean转为一个Map集合,我们在研发底层代码时,有前段传一个参数给我们数据接口通过一个传输对象接受后,在处理业务中有的第三方接口或者业务需要把一个Bean转换为通用的Map结构。

????????Spring IOC实例化,底层通过反射来实例化Bean,实例完成后就放入到ApplicationConxt上下文中。

????????AOP反射的实现,在AOP中,就是通过动态代理来实现我们在处理前 后 中的不同阶段来实现公共逻辑抽象与集中处理逻辑。

Class加载

ClassLoad加载

Class<?> aClass = ClassLoader.getSystemClassLoader().loadClass("java.lang.String");

Class加载

Class<?> aClass = Class.forName("java.lang.String");

通过实例

LoadClass loadClass = new LoadClass();
Class<? extends LoadClass> aClass1 = loadClass.getClass();

Class详情

????????在这个之前我们定义一个用户Bean来实现获取Class信息,我们定义一用户信息Bean包含:用户ID、用户名称、用户身份证号、定义如下:

package com.jdk.reflect;

import java.io.Serializable;
/**
 * Copyright (C), 2000-2022
 * FileName: UserDto.java
 * Author: yangcaho.cool@gamil.com
 * Date: 2022/4/29 10:49
 * Description: 用户
*/
public class UserDto implements Serializable {
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * 用户名称
     */
    private String userName;
    /**
     * 身份证件号
     */
    private String cardNo;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getCardNo() {
        return cardNo;
    }

    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }
}

字符串链接

  /**
    * @Author: yangchao.cool
    * @Date: 2022/4/29 11:11
     * Description: 字符链接
    */
    private String join(Stream<String> param) {
        StringBuffer result = new StringBuffer();
        param.forEach((key)->{
            if (result.length() > 0) {
                result.append(",");
            }
            result.append(key);
        });
        return result.toString();
    }

字段

方法

注解

构造函数

实例化

访问私有变量和私有方法

动态类型反射(泛型/数组)

泛型

数组

动态代理

实例

Bean转MAP

Http接口转发

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 16:02:57  更:2022-05-01 16:05:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:37:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码