Java: interface dans la collection non reconnue en tant que paramètre

Conception simple et code simple mais ne comstackz pas:

public interface Insertable { public Ssortingng getInsertStmt(Ssortingng table); } public class ClassCanBeInserted implements Insertable { public Ssortingng getInsertStmt(Ssortingng table) {} } public class SomeClass { public static void main() { List list = new ArrayList(); SomeMethod(list); } private static void SomeMethod(List list) {} } 

Et l’appel à SomeMethod () ne sera pas compilé. Anglais pauvre mais le code devrait expliquer. Quelqu’un peut-il essayer de comprendre ce qui ne va pas et comment obtenir un modèle pour proposer de proposer une liste de classes implémentées par une interface dans une telle méthode?

Encore une fois, anglais pauvre, donc peut ne pas être bien exprimé. Faites-moi savoir vos questions. Merci!

Message d’erreur donné: La méthode SomeMethod (List) du type ClassCanBeInserted n’est pas applicable pour les arguments (List)

List n’est pas une superclasse de List , même si Insertable est une superclasse de ClassCanBeInserted . Pour faire ce que vous voulez, vous devez changer la signature SomeMethod(List list) en SomeMethod(List list) .

Cela semble contre-intuitif au début.

J’imagine que la raison en est que le but des génériques est d’introduire et de contraindre la liste en fonction de la sécurité de type statique.

Si vous pouviez mettre un «Insertable» dans la liste, vous pourriez vous retrouver avec un mélange de différents types de classes.

Cela signifie que vos objects deviennent dangereux et risquent des exceptions ClassCastExceptions.