Czasami chcesz zwrócić wiele wartości z funkcji. Jak to zwykle się robi w Javie?
Jedną z opcji jest użycie tablicy, takiej jak ten fragment kodu w języku Python, który zwraca listę lub krotkę:
value, success = read_unreliably()
if success:
print value
Inną opcją byłoby zwrócenie skrótu / dict, na przykład w tym przykładzie JavaScript:
var result = readUnreliably()
if (result.success) {
alert(value);
}
Jeszcze jednym byłoby utworzenie niestandardowego obiektu tylko w tym celu, na przykład w tym przykładzie Java:
ReadUnreliablyResult result = readUnreliably()
if (result.getSuccess()) {
System.out.println(result.getValue());
}
Oczywiście możesz także użyć niektórych zmiennych globalnych do przechowywania tego, czego potrzebujesz, zamiast przekazywać rzeczy, ale powiedzmy, że nie jest to opcja.
java
coding-style
Mike M. Lin
źródło
źródło
Odpowiedzi:
Dokuczliwie.
Te techniki nie działają dobrze w Javie; wartości musiałyby zostać sprowadzone z Object.
Jest to najczęstsze, ale tworzenie wszystkich tych małych klas jest żmudne. W C ++ często używa się std :: pair, ale nie jest to często robione w Javie.
Dzięki Lombok tworzenie dość niestandardowych obiektów jest dość łatwe:
}
źródło
Tak, sposobem na stworzenie
struct
/tuple
/record
w Javie jest utworzenie klasy. Jeśli jest to tylko do użytku wewnętrznego, wolę użyć małej niezmiennej klasy strukturalnej z polami publicznymi.Przykłady:
W Scali jest to o wiele łatwiejsze:
źródło
Tuple2[Boolean, Int]
. Chociaż w tym konkretnym przykładzie zwrócisz wartośćOption[Int]
.W podanym przykładzie zgłoszenie wyjątku byłoby najbardziej standardowym sposobem jego obsługi:
Ponadto, jeśli dążysz do posiadania funkcji „Wykonaj jedną rzecz”, funkcja zwracania wielu wartości jest mniej potrzebna, choć czasami wygodna.
źródło
Mamy klasę ogólną Pair, która może przechowywać jedną instancję A i jedną instancję B. Prawdopodobnie możesz stworzyć Triplet lub Quadruplet w ten sam sposób.
źródło
Pair<String, Integer>
, co to oznacza? co oznaczają te wartości? nie możesz tego wiedzieć bez przeczytania implementacji metody.W Javie twoja funkcja zwróciłaby obiekt (lub być może zerowy w przypadku awarii). W ten sposób można zwrócić wiele danych.
źródło
Nie ma wyraźnego sposobu na zwrócenie wielu zmiennych w Javie, jednak istnieje kilka podejść:
źródło