2010-04-13 34 views
3

在java序列化问题中,我想保存一些类的名称,并且我在泛型类中遇到了一些问题。 例如:
- 如果我有ArrayList<String> listToDump = new ArrayList<String>();
- 如果我取的名字:listToDump.getName();listToDump.getCanonicalName();
- 我将有java.util.ArrayListArrayList
- 我想有java.util.ArrayList<String>ArrayList<String>获取带有仿制药信息的类名

任何想法我怎么能做到这一点?
达米安。

回答

6
  1. 你所描述不能工作的情况下,你可能listToDump.getClass().getName()

  2. 有没有办法让有关在运行时泛型类型信息,由于type erasure

    当通用类型被实例化,编译器将这些类型翻译为 一种称为类型擦除的技术 - 过程,其中编译器将所有的 与类型参数 以及类中的类型参数或 方法有关的信息。

  3. 如果您详细描述您尝试解决什么问题,那么我们可能会建议您一些解决方法或甚至解决方案。类型擦除不应该​​是一个大问题,它只是可以改变做某些事情的方式。

+0

(对第3点的回答):当它找到一个不通用的Collection时,使用我的'dump'cry和bug的程序。所以我想在我身边做一个解决方法,但看到你的答案我会告诉窃听程序的程序员看看他身边发生了什么,因为这不正常:) – Damien 2010-04-13 15:13:59

1

切换到支持它的语言。

您描述的行为称为类型擦除,这是泛型在Java中的实现方式。

3

如果listToDump是一个字段,则可以使用Field.getGenericType()。但是,Java泛型在运行时被删除 - 这只是一个简单的例子。你可以看看它的内容并找到常见的超类型,但是当涉及接口时会变得非常棘手,并且可能比你想要的更具体。

但是您是如何计划使用这些信息的?

1

我想如果你从List中提取任何元素,然后尝试获取它的类名称,你会得到你寻找的结果。