メソッドに複数の戻り値を呼び出し側に通知する2つのきれいな方法があります。
最初の最も簡単な方法は、すべての戻り値を含むオブジェクトを返すことです。それはリストのようなコレクションかもしれませんし、独自の価値クラスのオブジェクトかもしれません。
List<Person> matches = findMatches(peopleDB,criteria);
MatchReport report = findMatchesAsReport(peopleDB);
...
public List<Person> findMatches(PersonSource source,Criteria criteria) {
List<Person> list = new ArrayList<Person>();
while(source.hasNext()) {
Person person = source.next();
if(person.matches(criteria)) {
list.add(person);
}
}
return list;
}
秒、より複雑な方法は、あなたの方法は、それが彼らに遭遇するようにアイテムを渡すことができハンドラを定義することです。呼び出し側はその後、自分たちのニーズを満たしているよりも、PersonHandlerを定義することができます
public void findMatches(PeopleSource source, Criteria criteria, PersonHandler handler) {
while(source.hasNext()) {
Person person = source.next();
if(person.matches(criteria)) {
handler.onPerson(person);
}
}
}
:
public interface PersonHandler {
public void onPerson(Person p);
}
は、その後、あなたはそのハンドラがそれに渡されるあなたの方法を定義
private static class PrintToWriterPersonHandler implements PersonHandler {
private PrintWriter writer;
public WriteToStreamPersonHandler(PrintWriter writer) {
this.writer = writer;
}
public void onPerson(Person p) {
writer.println(person);
}
}
を...
findMatches(source,criteria,new PrintToWriterPersonHandler(System.out));
これは終了しましたeは関与し、初心者は複雑です。しかし、それは心に留めておく価値があります。これは、膨大な数の応答を生成するメソッドを処理でき、メソッドが終了するまで待つことなく、メモリ内の巨大なListで終わることなく処理できることを意味します。また、無期限に実行できるメソッドからの出力に対処できることも意味します。
私はこのメソッドを呼び出したメソッドからループで呼び出さなければならないと信じています。他のオプションは、区切り文字を使用して文字列を連結し、文字列全体を返すことです。 – Sid