小编Geo*_*ich的帖子

Java 获取 java.lang.Number 的通用子类或基元的 valueOf

在阅读了很多问题后,我问自己是否可以解决将字符串转换为通用数字而不使用硬编码方法的困境。

例如:我从方法中获取类型为 Class With Number.isAssignableFrom 的参数,或者通过其他方式检查这是否是数字类。但我也从用户那里得到了输入。作为一个字符串。

问题是:我现在可以以某种方式将此字符串转换为请求的数字对象,而无需为每种情况构建 if 语句吗?

示例代码,正常不起作用:

Object ret = null;

for(int i=0;i<method.getParameterTypes().length; i++ ) {
    Class<?> param = method.getParameterTypes()[i];
    String argString = getUserInput(_in, "Argument ("+param.getSimpleName()+"): ");

    if( Number.isAssignableFrom(param) )
        ret = ((Class<NumberChild>)param).valueOf(argString);
    /// OR
        ret = param.cast( Double.valueOf(argString) )
}
Run Code Online (Sandbox Code Playgroud)

甚至提出了这个问题:是否有可能将每个基元转换为与上述方式类似的东西?

注意:这里的方法应该完全关注非硬编码的解决方案。我当前运行的代码使用对每个案例进行硬编码的方法。但在这些情况下,更通用的解决方案会更有趣。

编辑: 我很抱歉造成误解,但我的意思是采用硬编码方法,这种方法可以测试每种可能的情况,例如:

 if( integer ); do ...
 if( double ); do ...
 if( long ); do ...
Run Code Online (Sandbox Code Playgroud)

但这正是我想要解决的问题。澄清一下:这只是一个挑战。我的生活或代码并不依赖于它,我只是想知道它是否可能!

java generics reflection casting hardcoded

5
推荐指数
2
解决办法
4038
查看次数

标签 统计

casting ×1

generics ×1

hardcoded ×1

java ×1

reflection ×1