Si j'ai ce qui suit:
- Type safety: The return type Bar for getBlah from the type Bar needs unchecked conversion to conform to T from the type Foo
3 Réponses :
Vous prenez une méthode à partir de votre interface, vous devez donc correspondre à votre implémentation de la signature de votre spécification:
public interface Foo<T extends Foo<T>> { T getBlah(); } public class Bar implements Foo<Bar> { @Override public Bar getBlah() { return this; } }
Et pourquoi, dans le nom de Dieu, devrait-il déduire un type générique qui n'est utilisé nulle part?
Je ne suppose pas que c'est son code entier. Parce que tu sais ce qu'ils disent sur les hypothèses ...
La première ligne doit être Interface publique FOO
Interface publique FOO
Je ne suis pas sûr que voulez-vous accomplir ici, mais je pense que le retour de FOO serait OK:
interface Foo { public Foo getBlah(); }
<T extends Foo> T getBlah(); means that a caller can request any type as T to be returned. So no matter what class the object is, I can request some other random subclass of Foo of my choosing to be returned. The only value that such a method could validly return is null (unless it does unsafe casts), which is probably not what you want.
Vous avez écrit que le type renvoyé par
getblah code> doit prolonger l'interface
foo code>. Mais
bar code> ne le fait pas, il l'applique.
'étend' couvre les implémentations d'interface
Un cas de trop généralisation. Voir le commentaire de JoeblackDev et la réponse de Alessandro Santini.