首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - BigDecimal和反射

Java - BigDecimal和反射
EN

Stack Overflow用户
提问于 2013-04-26 13:21:52
回答 3查看 1.5K关注 0票数 1

当我使用java.math.BigDecimaljava.lang.String的java反射检查类中的方法的参数时,isPrimitive()返回false。是的,它们不是原始的,而是i want to differnciate between user defined class and these java class

代码语言:javascript
复制
Class[] parameterTypes = method2.getParameterTypes();

for (Class class1 : parameterTypes) { // check the parameter type and put them in to a ArrayList
                                    methodParams = new MethodParams();
                                    strClassNameToFix = class1.getName();
                                    strClassname =strClassNameToFix.replaceAll("\\[L", "").replaceAll("\\;","");

                                        methodParams.setDataType(strClassname);
                                        if(class1.isArray()){
                                            methodParams.setArray(true);
                                        }
                                        if(class1.isPrimitive()){
                                            methodParams.setPrimitive(true);
                                        }
                                        tempParamsList.add(methodParams);
                            }

基于上面的代码,我将true设置为false methodParams.setPrimitive(true);我之所以这样做,是因为很少有情况下我会得到用户定义的对象,在我的例子中是com.hexgen.ro.request.CreateOrderRO

那么该如何设置呢?

同样使用反射,我得到了类名,在其中声明的方法和方法的参数类型。

但是,如果我声明了如下所示的方法,则无法获得参数名称:

代码语言:javascript
复制
 class test{
    public String testMethod(int a, String b){
    return "test";
    }

}

在上面的代码中,我能够获得以下代码

代码语言:javascript
复制
Class name : test
Method name : testMethod
Arguments Type : int and String

但是参数的i also want to get int a and String b类型以及声明的变量名

如何做到这一点。

请帮我把这件事做完。

诚挚的问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-26 13:29:56

没有特殊的标志来区分像BigDecimal这样的Java API类和像CreateOrderRO这样的用户定义类。您需要检查它们的包名,或者跟踪一组您希望区别对待的类。

为了回答您的第二个问题,在运行时不维护方法参数的名称。Method只能报告其参数的正式类型,而不能报告它们的名称,这一事实反映了这一点。

Spring:看起来在运行时发现方法参数名称是可能的,但前提是使用调试信息进行编译并使用类似ParameterNameDiscoverer。更多细节请看这篇文章:Getting the name of a method parameter (归功于PM 77-1's comment)。任何需要使用调试信息进行编译的严重解决方案都是一个严重的设计缺陷。

票数 2
EN

Stack Overflow用户

发布于 2013-04-26 13:30:14

如果使用调试信息进行编译,则可以获得参数名称。可以使用-g参数使用debug进行编译

否则,不会保留参数名称。

为了区分用户定义的类,您可以检查包名称。您可以维护您想要定义为用户定义的包列表,也可以维护您不将其定义为用户定义的包列表。

的原因是如果你正在使用任何第三方库,那么这些库的类是不是用户为你定义的?

票数 1
EN

Stack Overflow用户

发布于 2013-04-26 13:32:27

你可以有一个方法isPrimitive() (虽然我想要一个更好的名字,使用你使用的相同的名字),它可以做类似这样的事情:

代码语言:javascript
复制
boolean isPrimitive(Class class1) throws ClassNotFoundException {

    String className = class1.getName();
    if (className.equals("java.math.BigDecimal")|| className.equals("java.lang.String")) {
        return true;
    }
    return false;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16229278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档