J'essaie de comprendre la pensée du compilateur Java (je sais, mauvaise idée) ...Java erreur du compilateur: Type brut avec la méthode de retour en option
Tenir compte de ce programme:
import java.util.Optional;
public class xx {
public static class Foo<T> {
public interface Bar<T> {
int getX();
}
public Optional<Bar<T>> getBar() {
return Optional.empty();
}
}
public static void main(String[] args) throws Exception {
Foo foo = new Foo(); // note raw type
foo.getBar().get().getX();
}
}
java 1.8.0_112 compilateur donne:
xx.java:15: error: cannot find symbol
foo.getBar().get().getX();
^
symbol: method getX()
location: class Object
1 error
la question est: pourquoi ne pas le compilateur, étant donné le type brut Foo
pour foo
, se rendre compte que le type de retour foo.getBar()
est Optional<? extends Bar>
au lieu de ce qu'il semble penser, qui est Optional<?>
?
Note: Je sais comment changer ce programme pour qu'il soit compilé, ce n'est pas la question.
[Effacement de type] (https://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html)? –
L'effacement de type est un problème d'exécution, pas un problème de compilation. Mais je sais ce que vous voulez dire - cela a clairement quelque chose à voir avec l'utilisation d'un type brut. – Archie