Generics 是否可以在Vec中存储类型,而不是这些类型的实例?

Generics 是否可以在Vec中存储类型,而不是这些类型的实例?,generics,reflection,rust,Generics,Reflection,Rust,是否可以将不同类型的锈迹以某种形式存储到Vec中,以便我日后获取类型 我可以存储任何类型的TypeId,但就我所知,我无法使用TypeId返回原始类型 用Java术语来说,我想创建一个[boolean.class,char.class,…]等等。否。类型不是运行时构造,在编译过程中会被删除。您不能拥有类型本身的集合,因为它们不存在 大多数情况下,您都希望遵守某些共享接口(也称为trait)。Integer.class在Java中有用的唯一原因是Java实现了反射: 运行时具有所有现有类型的描述

是否可以将不同类型的锈迹以某种形式存储到
Vec
中,以便我日后获取类型

我可以存储任何类型的
TypeId
,但就我所知,我无法使用
TypeId
返回原始类型


用Java术语来说,我想创建一个
[boolean.class,char.class,…]
等等。

否。类型不是运行时构造,在编译过程中会被删除。您不能拥有类型本身的集合,因为它们不存在


大多数情况下,您都希望遵守某些共享接口(也称为
trait
)。

Integer.class在Java中有用的唯一原因是Java实现了反射:

  • 运行时具有所有现有类型的描述
  • 对于每种类型,它都有所有属性和方法的描述
因此,虚拟机可以在运行时凭空创建一个类型的实例


自动、普遍的反射至少违反了Rust的一个核心原则:

你不用的东西你不用付钱

因此没有实施

锈迹仍有一定程度的反射:

  • 它通过插件进行编译时反射
  • 它有一些类型信息,通过
    TypeId
但是,前者不会产生任何内存/性能开销,后者是按使用付费的


据我所知,目前还没有关于大幅扩展反思的建议。即使向下转换现在也作为一个库而不是语言选项进行探索(请参见板条箱)。

以后要如何处理这些类型?^和。。。你研究过性格特征吗?@ChrisEmerson:我有一个不同的列表,我想输入检查。我使用了一些类型把戏,在
Vec
中拥有它的所有值,但是提取类型会有点。。。因为类型本质上是一个
Cons
。我不确定你所说的类型检查异构列表和提取类型是什么意思。你能为你想做的事情显示一些伪代码吗?@DanielPath:你需要一个
Vec
中的同构的东西,但是类型可以实现一个
trait
,它返回存储在其中的类型(如果类的列表是有限的),或者如果类型/种类的列表是事先已知的,你可以使用一个
enum
,等你可能想问一个新问题,展示你用
Cons
编写的代码,并询问如何做得更好:用一个你问题的确切例子,答案会更相关。