使用多种getter方法打印的简洁方法 - Java

时间:2015-12-05 16:59:07

标签: java

我在类中有很多getter方法,我需要打印那些getter的返回(只有一个而不是一次全部)。我需要能够使用一个print()方法执行此操作,但我不知道如何执行此操作。有没有办法动态调用另一个方法,然后打印该方法的返回值?

以下是一些getter方法:

    public String getEmail()
    {
        return this.studentEmail;
    }

    public Integer getAge()
    {
        return this.studentAge;
    }

以下是我想要做的事情:

public void print(???)
{
    System.out.println(theGetterMethod);
}

我知道我可以创建一堆打印方法,但我需要能够用一种方法来完成。

2 个答案:

答案 0 :(得分:1)

您可以使用反射根据名称动态调用方法。

在这个例子中,我假设每个Getter都遵循一个模式,只是传递我要打印的属性名称:

import java.lang.reflect.Method;

public class Student {

    private String studentEmail = "MyEmail";
    private Integer studentAge = 20;

    public String getEmail() {
        return this.studentEmail;
    }

    public Integer getAge() {
        return this.studentAge;
    }

    // Prints out a property based on the name
    public void print(String property) throws Exception {
        for (Method method : this.getClass().getMethods())
            if (method.getName().equals("get" + property))
                System.out.println(method.invoke(this, null));
    }

    // Prints out all properties with a getter
    public void print() throws Exception {
        for (Method method : this.getClass().getMethods())
            if (method.getName().startsWith("get"))
                System.out.println(method.invoke(this, null));
    }
}

然后调用这样的方法:

Student s = new Student();
s.print("Email");
s.print("Age");

答案 1 :(得分:1)

根据OP的要求:

我认为您的第一条评论是正确的,这可能是一个答案。

发件人:

你可以使用Sytem.out.println解决它(”电子邮件:“+ ... getEmail(),”年龄:“+ ... getAge());如果你想过度杀戮你可以使用反射。

而不是使用单独的print()方法,而是为要打印的值调用正确的访问器。

这是您在该地方使用访问者的原因之一,因为现在您正在公开字段而不会有让用户更改它们的风险。

除了Object之外,您仍然可以更改基础String,因为它是不可变的。