Java 8 błędy kompilacji a na 7 działa

0

Witam,
poniższy kod nie kompiluje się na Java 8 a kompiluje na 7, dlaczego?? Tak jakby nie dokońca doprecyzowany parametr generyczny powodował zgubienie typu w parametrze zwracanym


public class Main {

	public static void main(String[] args) {
		Class c = Integer.class;
		String s = hello(c).get(0); //Type mismatch: cannot convert from Object to String

	}

	public static List<String> hello(Class<? extends Number> n) {
		return null;

	}

}
0
public static List<String> hello(Class<? extends Number> n) {
        return null;
}

Zwracasz null, a potem wywołujesz na nim

hello(c).get(0);

a konkretnie .get(0)

Aczkolwiek może to nie mieć w ogóle znaczenia.

0

Class<Integer> c = Integer.class;

0

@Szczery: która dokładnie Java 8? Bo w 1.8.0_20 było kilka baboli.

0

@Koziołek Kompiluje się na JDK 7.75 a problem na JDK 8.121 na innych nie próbowałem
Co do opowiedzi @jarekr000000 to spoko doszedłem do tego ale dlaczego to sie nie kompiluje z tak dziwnym błędem w testach mamy 100 takich przypadków

0

Zabawne, że to się kompiluje:

  Class c = Integer.class;
        List<String> list = hello(c);
        String s = list.get(0);
0
jarekr000000 napisał(a):

Zabawne, że to się kompiluje:

  Class c = Integer.class;
        List<String> list = hello(c);
        String s = list.get(0);

Ale z warningiem unchecked cast. Wygląda na to że gdy pomijamy typ generyczny w parametrze, to wszystkie generyki przestają działać. Nie znałem tego mechanizmu :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1