我需要在Java中进行一些反射方法调用。这些调用将包括具有原始类型(int,double等)参数的方法。反射地查找方法时,指定此类类型的方法是int.class,double.class等。
挑战在于我要接受来自外部源的输入,该输入将动态指定类型。因此,我还需要动态地提出这些Class引用。想象一个带分隔符的文件,其中包含方法名称列表和参数类型列表:
doSomething int double
doSomethingElse java.lang.String boolean
如果输入类似java.lang.String
,我知道我可以使用Class.forName("java.lang.String")
该Class实例。有什么方法可以使用该方法或其他方法来恢复原始类型Classes?
编辑:
感谢所有受访者。显然,没有内置的方法可以干净地执行我想要的操作,因此我将决定重用ClassUtils
Spring框架中的类。它似乎包含Class.forName()的替代品,可以满足我的要求。
Spring框架包含一个实用程序类ClassUtils,该类包含静态方法forName。此方法可用于您描述的确切目的。
如果您不希望依赖于Spring:该方法的源代码可以在
e
中找到
。
G。
了这里
对他们的公共仓库。该类源代码在Apache 2.0模型下获得许可。
但是请注意,该算法使用原始类型的硬编码映射。
编辑: 感谢评论员DávidHorváth和Patrick指出断开的链接。
我试着搜索像Multi-raw类型的东西,但我没有找到任何东西。 我该怎么做?
问题内容: 我正在尝试确定对象上字段的类型。当对象传递给我时,我不知道对象的类型,但我需要查找为s的字段。区分框s 很容易,但是原始图元似乎更加困难。 我 可以 确保传递给我的对象只有,没有基元,但我宁愿没有。所以我有: 一种似乎可行的hacky方法是: 如果有的话,我真的很希望有一种更清洁的方法。如果没有更好的方法,那么我认为要求我接收的对象仅使用(not )将是更好的API。 有任何想法吗?
问题内容: 我想问问哪段代码在Java中更有效?代码1: 代码2: 我的老师说第二个更好,但我不同意这种观点。 问题答案: 我更喜欢第一个而不是第二个,因为它使循环变量不会影响方法中其余代码。由于它们在循环外部不可见,因此以后不能无意间引用它们。 其他答案也是正确的: 不要 担心这种性能问题。但是,出于代码可读性的原因,并且为了与下一个出现的人交流程序员的意图, 请 考虑一下。这比微优化问题重要得
问题内容: Java中的原始类型是什么? 基本类型和引用类型之间有什么区别? Java有多少种原始类型,它们是什么? 问题答案: 在Java中,每个变量都有在源代码中声明的类型。类型有两种:引用类型和原始类型。引用类型是对对象的引用。基本类型直接包含值。有8种原始类型: *Byte *Short *Integer *Long *Scorch *Floating *Double *Boolean v
问题内容: 我很好奇Java的类和double的原始类型之间的性能差异是什么。因此,我创建了一个基准测试,发现类类型比原始类型慢3到7倍。(在本地计算机OSX上为3x,在ideone上为7x) 这是测试: http://ideone.com/fDizDu 那么为什么Double类型要慢得多呢?为什么还要实施它以允许数学运算符? 问题答案: 那么为什么Double类型要慢得多呢? 因为该值包装在需要
我对Java中的原语类型有一个问题。我使用的是JDK1.6。 如果我有以下信息: 编译器不想编译——它说它“无法从int转换为short”,并建议我转换为,因此: 真的管用。但我的问题是,我为什么要投?a和b的值在-短值范围为{-32768,32767}的范围内。当我想执行操作时,我还需要强制转换-,*,/(我还没有检查其他操作)。 如果我对基元类型执行相同的操作,我不需要将aa bb强制转换为。