我在方法中声明了两个形参,来自于用户的输入以及系统的。因为这个方法是在内部调用,然后在软件最下方的状态栏中输出提示信息,所以如果出错的话,要很直观的告诉用户和开发者,你在什么地方输入的什么值或者参数有问题。
我看了一下文档,java中的反射能解决一个类中属性的类型以及名字问题。如果要获取的对象是像我刚才提到的形参(可能是基本数值String、int、short、boolean啥的,也可能是Vector、JList对象),比如方法1这样声明:
private void swapData(Vector v1,Vector v2)
{
...
}以及以下这些情况:
private void compare(String s1,String s2)
{
...
}private void compare(int src,int target)
{
...
}private void compare(InputData data1,InputData data2)
{
...
}我怎么才能获得传入的形参的名称(就是v1、v2、s1、s2、src、target、data1、data2这些东西)和类型呢?(Vector、String、int、InputData)

解决方案 »

  1.   

    判断对象类型
    public static  void main(String args[]) {
        //String var = "123";
        int var = -120;
        //TODO:判断数据类型
        Object param = var;
        if (param instanceof Integer) {
            int value = ((Integer) param).intValue();
            System.out.println("var ls Integer!");
            System.out.println("var ls value ==" + value);
        } else if (param instanceof String) {
            String s = (String) param;
            System.out.println("var ls String!");
            System.out.println("var ls value ==" + s);
        } else if (param instanceof Double) {
            double d = ((Double) param).doubleValue();
            System.out.println("var ls double!");
            System.out.println("var ls value ==" + d);
        } else if (param instanceof Float) {
            float f = ((Float) param).floatValue();
            System.out.println("var ls float!");
            System.out.println("var ls value ==" + f);
        } else if (param instanceof Long) {
            long l = ((Long) param).longValue();
            System.out.println("var ls long!");
            System.out.println("var ls value ==" + l);
        
        } else if (param instanceof Boolean) {
            boolean b = ((Boolean) param).booleanValue();
            System.out.println("var ls boolean!");
            System.out.println("var ls value ==" + b);
        } else if (param instanceof Date) {
            Date d = (Date) param;
            System.out.println("var ls Date!");
            System.out.println("var ls value ==" + d);
        }    //以上代码为获得Object的类型
    }
      

  2.   

    以上代码不是很好使,以前版本的代码就是用的这个,每次的对象如果不同的话,都得手动添加判断,而且没有实例对象名字的获取方法,比如Vector v1,没有获取v1这个对象名字“v1”的方法。期待新的解决方案。
      

  3.   

    所有就出现了规范这一原则。。一般写setter方法的时候参数名都是用field名字吧?
      

  4.   

    对于对象的成员是可以用反射来获取其定义时的字面名字,
    但是对于方法的参数(局部变量),据我说知java标准API中
    没有相应的类。
      

  5.   

    Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。查看软件包  java.lang.reflect 
      

  6.   

    java.lang.reflect这个方法已经弄了,确实能实现获取方法内部的变量名称,这倒不是大问题。现在不是想要内部变量,是想要局部变量。
      

  7.   

    别考虑了,局部变量的名字编译后就没有了。
    要把局部变量的名字弄到类文件中好像只能通过javac -g 来编译了,但不知道如何读出来。
      

  8.   

    可以封装一个对象,该对象中有一个type的字段,你只要维护一个常数列表就可以了。