【问题标题】:How to get type from String?如何从字符串中获取类型?
【发布时间】:2014-01-01 21:32:23
【问题描述】:

具体来说 - 我什至不知道这是否可能,但可能有一些东西,我错过了。 我需要从 String 中获取类类型并将其用作泛型类型:

//Don't mind this
String columnName = n.getAttributes().getNamedItem("name").getTextContent(); 

//That would be canonical class name    
String columnType = n.getAttributes().getNamedItem("type").getTextContent();

Column<**Type from columnName**> col = new Column<>(columnName);

这样的事情可能吗?

【问题讨论】:

  • 不,不是。泛型是一个编译时概念。它们在运行时不存在。
  • 可以从字符串名称中获取Class,但这对您没有帮助。泛型参数是 compile-time 的东西;您拥有只有在运行时才知道的信息。
  • 您可能需要考虑为 columnName 和 columnType 编写单独的参数化类。

标签: java string class types


【解决方案1】:

不知道你的意思。

但是要从字符串中获取类型,您必须使用

Class clazz = Class.forName("YourString");

如果类加载器能够将您给定的 String 解析为位于其中的类 类路径,它将为您提供一个 Class 类型的实例。

用表达式

Object obj = clazz.newInstance();

你可以创建一个这种类型的实例。

我觉得有这样的表达方式

ArrayList<? super Double> list;

在你的情况下:

Column<? super GenericColumn> col = new Column<GenericColumn>(columnName);

这意味着由适当的 String 给出的类必须继承自 一个在运行时已知的 GenericColumn。也许这可以解决您的问题。

无论如何,在这种情况下,我认为泛型没有用。

【讨论】:

  • 其实我忘了说,Column 参数保存了它使用的数据类型。 Column 旨在像 Vector 或 List 一样使用。
  • 是的,我想我知道你的意思。因此,无论如何,我和您已经提到的问题下方的 cmets 一样,没有类型安全的方法可以满足您的需求。您始终必须回退到抽象类或接口类才能将列声明为泛型类型。但这是一个非常有趣的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2019-10-27
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多