2017-09-08 12 views

Répondre

2

Avec

List obj = new LinkedList()

Qu'est-ce que vous avez est un List. Vous avez "stocké" le LinkedList dedans mais vous le traitez comme List.

D'autre part, avec: -

LinkedList obj = new LinkedList()

Vous pouvez le traiter comme un LinkedList

1

Si vous parlez de java.util.List c'est une interface, alors que LinkedList est une classe qui implémente la liste.

LikedList
List

C'est pourquoi vous ne pouvez utiliser que les méthodes d'interface.

0

compilateur cause ne marche pas savoir quel type de liste que vous utilisez, donc avec l'identification de type run-time vous ne pouvez utiliser que des méthodes d'interface, et ici, List is interface

0

Votre code crée une variable de type List (une interface).

Lorsqu'un autre code référence la variable obj, il ne peut que supposer que tout objet référencé à l'aide de la variable obj implémente l'interface List. Pour affirmer que l'objet référencé par obj est une liste liée, vous devez convertir l'obj en LinkedList, en supposant que l'implémenteur d'interface est une liste liée.

S'il est généralement bon de programmer avec des abstractions telles que des interfaces, si vous avez besoin d'accéder aux méthodes fournies par le type brut, cela indique que vous devez utiliser une référence au type brut (dans ce cas LinkedList) ou utiliser un interface autre que List qui fournit la méthode dont vous avez besoin.

LinkedList<String> myLinkedList = new LinkedList<>(); 

public void expectsList(List<String> maybeLinkedList){ 

    maybeLinkedList.listInterfaceMethod(); // works ok 

    LinkedList linkedList = (LinkedList<String>) maybeLinkedList; // CAST may fail if obj is not a linked list 

    linkedList.linkedListMethod(); // If cast worked, this works 
} 

public void expectsLinkedList(LinkedList<String> aLinkedList){ 

    aList.listInterfaceMethod(); // Works because linked list honors the List interface 

    List<String> list = aLinkedList; // also works because Linked list 'is a' kind of List 

    list.listInterfaceMethod(); // works ok 

    linkedList.linkedListMethod(); // We know the input object is a linked list 

} 

Notez que cette coulée est juste pour illustrer les types changeants - vous n'avez pas besoin de jeter pour résoudre votre problème dans ce cas.