使用设置器功能及其对象的值打印输出

时间:2019-04-19 07:16:22

标签: java

假设下面有一个pojo类

class Student
{
   int id;
   String name;

   public void setId(int id)
   {
      this.id = id;
   }

   public int getId()
   {
      return this.id;
   }

   public void setName(String name)
   {
      this.name = name;
   }

   public String getName()
   {
      return this.name;
   }
}

因此,假设在某个类中,我正在创建一个如下所示的对象

Student s = new Student();
s.setId(1);
s.setName("Giri");

因此接下来,无论对象类型如何,我都想像下面那样打印输出,我需要动态打印。

Output: 
s.setId(1);
s.setName("Giri");

有什么逻辑可以打印吗?

3 个答案:

答案 0 :(得分:0)

我想您可以在您的pojo setter中包含打印方法:

   public void setId(int id)
   {
      this.id = id;
      System.out.println("s.setId(" + id + ");");
   }

答案 1 :(得分:0)

我喜欢这个。

如果您使用任何基于JetBrains的IDE(甚至是Android Studio),那么您可以使用一个实时模板作为
Settings-> Live Templates-> Add(using + button)
注意:确保已启用Groovy使其正常工作(默认情况下)。

  1. 使用soutm创建一个新模板,它可以作为您将调用的快捷方式。如下图所示填充。请注意,如果发生冲突,可以使用任何其他快捷方式代替soutm。模板文字为System.out.println($content$); step 1

  2. 单击“编辑变量”选项,步骤1中定义的内容变量的值将为
    groovyScript("def params = _2.collect {it + ' = [\" + ' + it + ' + \"]'}.join(', '); return '\"' + _1 + '() called' + (params.empty ? '' : ' with: ' + params) + '\"'", methodName(), methodParameters()) 好的 step 2

  3. 最后,单击底部的define以选择语言,然后选择Java Statement。您可以更改Expand选项。此处它设置为Tab,这意味着点击选项卡将展开快捷方式。如果您不想使用,请取消选中static imports选项。 step 3

要在任何方法中测试调用soutm,它应该扩展以打印所有变量数据。

答案 2 :(得分:0)

public static void printValues(Object object, String referenceName) {
        Method[] methods = object.getClass().getMethods();
        for(Method method : methods){
            if(isGetter(method))
                try {

                if(method.getReturnType().getSimpleName().contentEquals("Date"))
                {
                    if(method.invoke(object)!=null)
                    {
                        System.out.println(referenceName+"." + method.getName().replace("get", "set")+"(new Date(\""+method.invoke(object)+"\"));");
                    }
                }
                else if(method.getReturnType().getSimpleName().contentEquals("long"))
                {
                    System.out.println(referenceName+"." + method.getName().replace("get", "set")+"("+method.invoke(object)+"L);");
                }
                else if(method.getReturnType().getSimpleName().contentEquals("String"))
                {
                    if(method.invoke(object)!=null)
                    {
                        System.out.println(referenceName+"." + method.getName().replace("get", "set")+"(\""+method.invoke(object)+"\");");
                    }

                }
                else if(method.getReturnType().getSimpleName().contentEquals("BigInteger"))
                {
                    if(method.invoke(object)!=null)
                    {
                        System.out.println(referenceName+"." + method.getName().replace("get", "set")+"(new BigInteger(\""+method.invoke(object)+"\"));");
                    }
                }
                else if(method.getReturnType().getSimpleName().contentEquals("double"))
                {
                    System.out.println(referenceName+"." + method.getName().replace("get", "set")+"("+method.invoke(object)+");");
                }
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
      }
}

public static boolean isGetter(Method method){
      if(!method.getName().startsWith("get"))      return false;
      if(method.getParameterTypes().length != 0)   return false;  
      if(void.class.equals(method.getReturnType())) return false;
      return true;
    }