我在类中有很多getter方法,我需要打印那些getter的返回(只有一个而不是一次全部)。我需要能够使用一个print()
方法执行此操作,但我不知道如何执行此操作。有没有办法动态调用另一个方法,然后打印该方法的返回值?
以下是一些getter方法:
public String getEmail()
{
return this.studentEmail;
}
public Integer getAge()
{
return this.studentAge;
}
以下是我想要做的事情:
public void print(???)
{
System.out.println(theGetterMethod);
}
我知道我可以创建一堆打印方法,但我需要能够用一种方法来完成。
答案 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
,因为它是不可变的。