java怎么样实现反射_Rust如何实现反射?
首先,鲁斯特没有反思;反射意味着您可以在运行时获取有关类型的详细信息,例如字段,方法,它实现的接口等 . 您不能使用Rust执行此操作 . 您可以获得的最接近的是显式实现(或派生)提供此信息的特征 .
每种类型在编译时都会分配给它 TypeId . 因为具有全局排序的ID很难,所以ID是从包含的类型's definition, and assorted metadata about the crate in which it'的组合派生的整数 . 换句话说:它们只是用于定义类型的各种信息的哈希值 . [1]
impl Any for T {
fn get_type_id(&self) -> TypeId { TypeId::of::() }
}
(边界可以非正式地减少到"all types that aren't borrowed from something else" . )
您还可以找到 TypeId 的定义:
pub struct TypeId {
t: u64,
}
impl TypeId {
pub const fn of() -> TypeId {
TypeId {
t: unsafe { intrinsics::type_id::() },
}
}
}
intrinsics::type_id 是编译器识别的内部函数,在给定类型的情况下,返回其内部类型ID . 这个调用只是在编译时用文字整数类型ID替换;这里没有实际的电话 . [2]这就是 TypeId 知道类型的ID是什么 . TypeId ,然后,只是这个 u64 的包装器,以隐藏用户的实现细节 . 如果您发现它在概念上更简单,您可以将类型的 TypeId 视为编译器在编译时才知道的常量64位整数 .
Any 从 get_type_id 转发到此,意味着 get_type_id 实际上只是将特征方法绑定到适当的 TypeId::of 方法 . 它只是确保如果你有一个 Any ,你可以找到原始类型的 TypeId .
现在, Any 已针对大多数类型实现,但这并不意味着所有这些类型实际上都在内存中浮动 Any 实现 . 实际发生的是,如果有人编写需要它的代码,编译器只为类型的 Any 实现生成实际代码 . [3]换句话说,如果您从未对给定类型使用 Any 实现,则编译器将永远不会生成它 .
这就是Rust履行"do not pay for what do you not use"的方式:如果您从未将给定类型作为 &Any 或 Box 传递,则永远不会生成相关代码,也不会占用已编译二进制文件中的任何空间 .
[1]:令人沮丧的是,这意味着类型的 TypeId 可以根据库的编译方式进行更改,以便将其编译为依赖项(而不是独立构建)会导致 TypeId 更改 .
[2]:就我所知 . 我可能错了,但如果是这样的话,我会感到非常惊讶 .
[3]:这对于Rust中的泛型通常是正确的 .
java怎么样实现反射_Rust如何实现反射?相关推荐
- Java反射实践:从反射中理解class
写在前面 今天在需求评审的时候,遇到了挺有意思的要求.需求是什么样子就不说了.总之完成这个需求需要一个调用系统api的操作.然而这个api因为并不稳定的原因.被谷歌hide掉了. 这个时候我们最直接的 ...
- java 反射 性能_java高性能反射及性能对比
java编程中,使用反射来增强灵活性(如各类框架).某些抽象(如各类框架)及减少样板代码(如Java Bean). 因此,反射在实际的java项目中被大量使用. 由于项目里存在反射的性能瓶颈,使用的是 ...
- java測試動態方法_java反射学习
反射的核心Class类 Class类是一个特殊的类,不能手动创建,只能由jvm来创建. jvm在类加载时会为每个类生成一个与之对应的Class对象在Java堆中(且每个类只会有一个对应的Class对象 ...
- java 反射api_Java学习笔记--反射API
反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计思路,一 ...
- java注解的反射_Java注解与反射
概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...
- Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持
Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ) A Java反射主要涉及的类如C ...
- Java高质量代码之 — 泛型与反射
在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用 ...
- Java面向对象编程篇6——注解与反射
Java面向对象编程篇6--注解与反射 1.注解概述 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类.方法.变量.参数和包等都可 ...
- java反射源码_java反射技术详解附源码
在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...
最新文章
- CSDN 湘苗培优,打造高素质技术人才
- 传统软件的云计算之路
- 启动窗口画面类CSplashWnd
- 怎么将matlab滤波器系数导出_matlab与FPGA数字信号处理系列(1)——通过matlab工具箱设计FIR数字滤波器...
- C/C++搞不懂指针还是数组?用sizeof解释struct大小!
- Linux shell脚本中如何读取跟shell脚本同一目录下的配置文件
- 斐波那契数列PHP非递归数组实现
- vuex实现及简略解析
- 旋转矩阵(Rotation matrix):旋转轴与旋转角 ( axis and angle )
- c语言eval函数,百行代码轻便实现C#中的Eval函数
- 【云原生 | Envoy 系列】--Envoy Http Ingress,Egress,front Proxy静态配置
- Linux系统安全及应用-grub菜单启用密码限制10
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
- 使用计算机对炼钢过程进行,转炉炼钢计算机数采监控技术及应用
- 使用cookiecutter创建pyramid项目
- [gdc13]《孤岛危机3》渲染技术
- oracle dba导入,“只有DBA才能导入由其他DBA导出的文件”各种解决办法
- 释万行上师:罕见的修行真相揭秘【全】
- 【查找算法】二叉排序树查找法
- 京东主图如何优化,一键自动替换长图