Witam,
Mam gotowy program, który wyrzuca ClassCastException, wiem w którym miejscu.
Mam teraz za zadanie, wymyślić sposób aby temu zaradzić w fazie kompilacji tak aby kompilator oznaczył daną linię jako błąd.
Trochę mnie to dziwi, ponieważ IntelliJ od razu przy próbie uruchomienia wyrzuca błąd i linię w której się znajduje.
Rozumiem, że to zadanie, które poinformuje kogoś kto pisze w cmd?
public class ImportantClass {
public static void main (String args[]) {
Function<String, List<Integer>> takeInt = line -> {
// taking ints from string
return null;
};
Function<List<Integer>, Integer> sumAll = line -> {
// summing ints
return null;
};
List<String> arglist = Arrays.asList(args);
Execute<List<String>> importantClass = new Execute<>(arglist);
Integer result = importantClass.make(takeInt, sumAll); // tutaj problem z castowaniem bo takeInt oczekuje Stringa a dostaje Listę
}
}
oraz:
public class Execute<T> {
private T words;
public Execute(T words) {
this.words = words;
}
public <R> R make(Function<?, ?>... tab) {
Function f = tab[0];
R abc = (R) f.andThen(tab[1]).apply(words);
return abc;
}
}
Podobno powinienem poprawić metode Execute a ImportClass nie potrzebuje zmiany (ale można to zrobić).
Niestety nie bardzo rozumiem co oznacza "na poziomie kompilacji" tymbardziej przy korzystaniu z IntelliJ, który robi wszystko sam.