Czy auto
w Javie istnieje typ zmiennej, taki jak w C ++?
Przykład:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Wiem, że w Javie istnieje ulepszona pętla for, ale czy istnieje opcja auto? Jeśli nie, czy można to zrobić? Mam na myśli nową funkcję w C ++ 11
Object
, więc w przypadku niektórych operacji możesz użyć,Object
gdzie chceszauto
.to_string
funkcji obiektu , a nie rzeczywistego obiektu, czyż nie?Odpowiedzi:
Odpowiedział przed pytaniem było EDYCJI :
Nie,
auto
w Javie nie ma typu zmiennej. Tę samą pętlę można osiągnąć jako:Java ma zmienne lokalne, których zakres mieści się w bloku, w którym zostały zdefiniowane. Podobny do C i C ++, ale nie ma słowa kluczowego auto ani register. Jednak kompilator Java nie pozwoli na użycie zmiennej lokalnej, która nie została zainicjowana jawnie i spowoduje błąd kompilacji (w przeciwieństwie do C i C ++, gdzie kompilator zwykle wyświetla tylko ostrzeżenie). Dzięki uprzejmości: Wikipedia .
Nie, w Javie nie ma żadnego głównego nurtu wnioskowania o typie, takiego jak C ++. Wystąpił błąd RFE, ale został on zamknięty z powodu „Nie zostanie naprawiony”. Podano powód:
źródło
Object
) nie może być zrobionych w ten sposób. To naprawdę nie jest dobra odpowiedź, zdarza się, że działa tylko dlatego, że przykład w pytaniu jest słaby.auto
w C i przed C ++ 11. Twoja zmiana jest poza tematem.var
jest zastrzeżonym słowem kluczowym od wersji Java 9.Może Java 10 ma to, czego Ty (i ja) chcesz, poprzez
var
słowo kluczowe.Z propozycji ulepszeń JDK 286
Aktualizacja: Tak , ta funkcja trafiła do wydania Java 10!
źródło
var
nie jest słowem kluczowym! Z JLS : „var nie jest słowem kluczowym, ale raczej identyfikatorem o specjalnym znaczeniu jako typ lokalnej deklaracji zmiennej”. Dlatego w przeciwieństwie do słów kluczowych nic nie stoi na przeszkodzie, aby wywołać zmienną lub metodę „var”.var
rzeczywiście nie ma go na liście słów kluczowych.Java 7 wprowadza składnię diamentów
W porównaniu ze starą wersją java
Krytyczny czytelnik zauważy, że ta nowa składnia nie pomaga w pisaniu pętli for w oryginalnym pytaniu. Wydaje się, że jest to poprawne i całkowicie zamierzone. Zobacz inną odpowiedź, która cytuje bazę danych błędów Oracle.
źródło
auto integerBox = new Box<Integer>();
jest to zwykle używane do uzyskania wartości zwracanej z funkcji, które czasami mogą być złożone, jakHashMap<String, LinkedList<Operation, Set<Integer>>>
W Javie 8 można użyć wnioskowania o typie lambda, aby uniknąć deklarowania typu. Analogią do przykładów pytającego byłoby:
z których oba można również uprościć za pomocą odniesień do metod:
źródło
Krótko mówiąc, nie, nie ma typu automatycznego. Jeśli wszystko, co robisz, to drukowanie wartości, możesz po prostu odnieść się do wartości jako
Object
.źródło
hashCode
s, albo zbieranie nazw klas, albo ... wpadłeś na pomysł;) Lista jest jednak krótka. Zobacz dokumentację klasy Object (komentarz przeznaczony dla początkujących, jestem pewien, że wiedziałeś o tym SimonC)To nie jest rozwiązanie w czystej Javie, jednak dodanie biblioteki o nazwie lombok umożliwi poniższej magii kompilację i działanie bardzo podobne do
auto
słowa kluczowego w C ++źródło