Próbuję zwrócić 2 wartości z metody Java, ale dostaję te błędy. Oto mój kod:
// Method code
public static int something(){
int number1 = 1;
int number2 = 2;
return number1, number2;
}
// Main method code
public static void main(String[] args) {
something();
System.out.println(number1 + number2);
}
Błąd:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
at assignment.Main.something(Main.java:86)
at assignment.Main.main(Main.java:53)
Wynik Java: 1
java
function
return-value
javaLearner.java
źródło
źródło
Odpowiedzi:
Zamiast zwracać tablicę zawierającą dwie wartości lub używać wartości ogólnej
Pair
klasy , rozważ utworzenie klasy reprezentującej wynik, który chcesz zwrócić, i zwróć instancję tej klasy. Nadaj klasie sensowne imię. Zaletami tego podejścia w porównaniu z użyciem macierzy jest bezpieczeństwo typu i znacznie ułatwi to zrozumienie programu.Uwaga:
Pair
Klasa ogólna , jak zaproponowano w niektórych innych odpowiedziach tutaj, zapewnia również bezpieczeństwo pisania, ale nie przekazuje tego, co reprezentuje wynik.Przykład (który nie używa naprawdę znaczących nazw):
źródło
Java nie obsługuje zwrotów o wielu wartościach. Zwraca tablicę wartości.
źródło
Możesz zaimplementować ogólny,
Pair
jeśli jesteś pewien, że musisz tylko zwrócić dwie wartości:a następnie niech metoda zwróci, że
Pair
:źródło
Możesz zwrócić tylko jedną wartość w Javie, więc najładniejszy sposób jest następujący:
Oto zaktualizowana wersja Twojego kodu:
źródło
Oto naprawdę proste i krótkie rozwiązanie z SimpleEntry:
Używa tylko wbudowanych funkcji Java i ma tę zaletę, że zapewnia bezpieczeństwo.
źródło
musisz użyć kolekcji, aby zwrócić więcej niż jedną zwracaną wartość
w twoim przypadku piszesz swój kod jako
źródło
źródło
Użyj obiektu typu Para / Tuple, nawet nie musisz go tworzyć, jeśli zależysz od Apache commons-lang. Wystarczy użyć klasy Pair .
źródło
Jestem ciekawy, dlaczego nikt nie wymyślił bardziej eleganckiego rozwiązania zwrotnego. Zamiast więc używać typu zwracanego, używasz procedury przekazanej do metody jako argumentu. Poniższy przykład ma dwa przeciwstawne podejścia. Wiem, który z nich jest dla mnie bardziej elegancki. :-)
źródło
Nie musisz tworzyć własnej klasy, aby zwrócić dwie różne wartości. Wystarczy użyć HashMap w następujący sposób:
Masz nawet zaletę bezpieczeństwa typu.
źródło
Moim zdaniem najlepiej jest stworzyć nową klasę, której konstruktor jest potrzebną funkcją, np .:
Następnie po prostu użyj konstruktora, tak jak przy użyciu funkcji:
i możesz użyć pR.sth1, pR.sth2 jako „2 wyników funkcji”
źródło
Możesz również wysyłać zmienne obiekty jako parametry, jeśli użyjesz metod do ich modyfikacji, zostaną one zmodyfikowane po powrocie z funkcji. Nie będzie działać na takich rzeczach jak Float, ponieważ jest niezmienny.
Wynik jest następujący: Rutger
źródło
Zwróć tablicę obiektów
źródło
Po pierwsze, byłoby lepiej, gdyby Java miała krotki do zwracania wielu wartości.
Po drugie, koduj najprostszą możliwą
Pair
klasę lub użyj tablicy.Ale jeśli zrobić potrzebę powrotu parę, za co pojęcie to oznacza (poczynając od jego nazwy pól, a następnie nazwa klasy) - i czy odgrywa to większej roli niż myślałeś, a jeśli to pomoże ogólny projekt, aby mieć wyraźna abstrakcja. Może to
code hint
...Uwaga: Nie jestem dogmatycznie mówiąc, że będzie pomóc, ale tylko patrzeć, aby zobaczyć , czy to robi ... czy też nie.
źródło
i to w jaki sposób to zrobić w JS:
return { objA, valueB }
. Wiem, że to nie na temat, ale nie mogę powstrzymać się od pozostawienia tego komentarza po tym, jak zobaczyłem, jak zaimplementować całą nową klasę w Javie. JavaScript - przestań marnować swoje życie i zacznij pisać skrypty!źródło