3

在 Java 中,如果我有以下信息:List.class, Map.class, Integer.classfoo某个 Object. 可以投foo进去List<Map<Integer, Integer>>吗?我想不是因为类型擦除,而是想知道是否有另一种方法可以实现类似的东西。

编辑:提供更多上下文。我正在编写一个能够接受查询(由对象和指标组成)并输出所需指标的应用程序。一个例子是“列表中元素的总和”。客户端需要编写一个提供程序,将自己注册到应用程序并广播它能够为某些对象类型提供某种度量类型(例如列表的总和)。该应用程序在接收到查询后将匹配正确的提供者并calculate在其上调用该方法。

没有泛型,这很简单。任何对象实例的规范类型都是它的类。因此,我会将查询中的对象视为Object然后使用它class,找到一个能够提供该对象实例的提供程序。指标的类似情况。

现在介绍泛型...假设我将度量定义f为列表中元素的总和,如果元素是Integer,则产品是元素Double。我需要 2 个提供者,一个List<Integer>提供List<Double>. 但是由于类型擦除,我不能class直接使用规范类型。所以我存储了相关的类(List.classandInteger.classList.classand Double.class)并使用类元组匹配提供者。

因此,在该calculate方法中,我需要执行从Object提供程序处理的适当类型的协变转换。

也许我对问题采取了错误的方法?

4

2 回答 2

2

你会得到最接近的是:

List<Map<Integer, Integer>> fooList = List.class.cast(foo);

由于不安全的转换和原始类型的使用,它会产生编译器警告,但它实际上是安全的(如果你知道你的 Object 包含它所说的内容)。

于 2012-11-15T17:20:10.960 回答
2

不是没有得到警告,AFAIK。

List<Map<Integer, Integer>> bar = (List<Map<Integer, Integer>>) foo;
于 2012-11-15T17:24:22.947 回答