2015-12-05 3 views
1

У меня есть довольно много методов getter в классе, и мне нужно распечатать возврат этих геттеров (только один, а не все из них сразу). Мне нужно сделать это с помощью одного метода print(), но я не уверен, как это сделать. Есть ли способ динамически вызвать другой метод, а затем распечатать возврат этого метода?Ясный способ печати с использованием нескольких методов getter - Java

Вот несколько методов геттерных:

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

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

Вот что я хочу сделать:

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

Я знаю, что я могу создать кучу методов печати, но мне нужно иметь возможность сделать это одним способом.

+2

Вы можете решить ее с помощью 'Sytem.out .println ("E-mail:" + ... getEmail(), "Age:" + ... getAge()); 'Если вы хотите перейти * overkill *, вы можете использовать отражение. – Emz

+0

@ Emz Извините, я должен был упомянуть, что мне нужно всего лишь распечатать одну вещь вовремя и не использовать все методы getter, а только один из методов getter. – dericcain

+1

Обычно метод 'toString()' печатает все поля. – markspace

ответ

1

Как запросили ОП:

«Я думаю, вы были правы с вашей f первый комментарий, и это может быть ответ. "

От:

" Вы можете решить ее с помощью Sytem.out.println ("Электронная почта:" + ... getEmail(), "Возраст:" + ... СеЬАде()); Если вы хотите пережить, вы можете использовать отражение. "

Значение вместо того, чтобы иметь индивидуальный print() метод, вместо этого будет вызывающим правильный аксессор для значения, которое необходимо напечатать.

Это одна из причин, почему вы используете аксессор в месте, так как теперь вы подвергая поля без какого-либо риска, имеющих пользователю изменять их.

Вы все еще можете изменить на основной Object S кроме String как это неизменная.

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"); 
+0

Мне нравится этот метод. Чтобы добавить к нему, если вы хотите знать, что у вас были все ваши получатели (предположительно, чтобы вы знали, какие результаты getter вы могли бы «print()»), вы могли бы просто выполнить цикл через имена 'Method' с помощью' StartsWith ("получить") '. –

+0

@KenSlade Хорошая мысль, я добавил –

Смежные вопросы