动态查找表示原始 Java 类型的类

新手上路,请多包涵

我需要在 Java 中进行一些反射方法调用。这些调用将包括具有原始类型(int、double 等)参数的方法。在反射查找方法时指定此类类型的方法是 int.class、double.class 等。

挑战在于我正在接受来自外部源的输入,该输入将动态指定类型。因此,我也需要动态地提出这些类引用。想象一个带分隔符的文件,其中包含方法名称列表和参数类型列表:

 doSomething int double
doSomethingElse java.lang.String boolean

如果输入类似于 java.lang.String ,我知道我可以使用 Class.forName("java.lang.String") 回到那个 Class 实例。有什么方法可以使用该方法或其他方法来取回原始类型类吗?

编辑: 感谢所有受访者。很明显,没有内置的方法可以干净地做我想做的事,所以我将满足于重用 Spring 框架中的 ClassUtils 类。它似乎包含 Class.forName() 的替代品,可以满足我的要求。

原文由 Mike Furtak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 434
2 个回答

Spring 框架包含一个实用程序类 ClassUtils ,其中包含静态方法 forName。此方法可用于您描述的确切目的。

如果您不喜欢依赖 Spring:可以找到 该方法的源代码e。 G。 他们的公共存储库中。类源代码在 Apache 2.0 模型下获得许可。

但是请注意,该算法使用原始类型的硬编码映射。


编辑: 感谢评论者 Dávid Horváth 和 Patrick 指出断开的链接。

原文由 Synoli 发布,翻译遵循 CC BY-SA 3.0 许可协议

原始类型的 Class 实例可以如您所说使用例如 int.class 获得,但也可以使用类似 Integer.TYPE 每个原始包装类都包含一个静态字段 TYPE ,它具有相应的原始类实例。

您无法通过 forName 获取原始类,但您可以从现成的类中获取它。如果你绝对必须使用反射,你可以尝试这样的事情:

 Class clazz = Class.forName("java.lang.Integer");
Class intClass = clazz.getField("TYPE").get(null);

intClass.equals(int.class);         // => true

原文由 Daniel Spiewak 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题