Przed Java 7 składni poniżej użyto do utworzenia ArrayList,Korzystanie z operatorem diament w Javie 7
ArrayList<Integer> ints = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7));
Ale ponieważ Java 7 możemy pominąć typu rodzajowego w IE konstruktora,
ArrayList<Integer> ints = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
ale gdy próbowałem zrobić coś takiego,
ArrayList<Number> nums = new ArrayList<>(Arrays.asList(1,2,3,4,4,5.5,6.6,7.7));
pojawia się błąd, ale kiedy wspominając o ogólny typ po prawej stronie czyli
ArrayList<Number> nums = new ArrayList<Number>(Arrays.asList(1,2,3,4,5.5,6.6,7.7));
Kod działa idealnie. Jaki może być tego powód?
Dzięki z góry.
Nie mogę pobrać konkretnych fragmentów z JLS, które zmieniły się między Java 7 i 8, aby to wspierać, więc to jest komentarz, ale jeśli pamięć obsługuje Java 8 rozszerzyła rodzaje wnioskowania, które można wykonać, wierzę, że umożliwiając przeszukanie supertekstów i/lub uwzględnienie dodatkowego kontekstu. Twój trzeci fragment kodu kompiluje się bez skarg w języku Java 8. – awksp