Pourquoi l'importation de java.util. * N'inclut-elle pas les tableaux et les listes?
Je suis à l'aide de java sur debian 5
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, en mode mixte, partage)
Pourquoi est-il une différence entre la suivante
Cas 1:
import java.util.*;
Cas 2:
import java.util.*;
import java.util.Arrays;
import java.util.List;
Pourquoi ne pas le premier cas couvrir le second cas?
Le code ne compile quand je importer des Tableaux et la Liste explicitement.
Code:
import java.util.*;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main (String[] args) {
List<Integer> i = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
List<Integer> j = new ArrayList();
ListIterator<Integer> n = i.listIterator(i.size());
while(n.hasPrevious()) {
j.add(n.previous());
}
println(j);
}
static void println(Object o) {
System.out.println(o);
}
static void print(Object o) {
System.out.print(o);
}
}
L'erreur que je reçois quand je commenter les 2e et 3e déclarations d'importation sont:
nattyp@debian:~/dev/java$ javac Test.java
Test.java:7: cannot find symbol
symbol : method asList(int,int,int,int,int,int,int,int,int,int)
location: class Arrays
List<Integer> i = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
^
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
nattyp@debian:~/dev/java$
source d'informationauteur nattyP
Vous devez vous connecter pour publier un commentaire.
Je viens de le compiler et il compile très bien sans l'implicite à l'importation, probablement que vous avez vu un rassis cache ou quelque chose de votre IDE.
Avez-vous essayé de compiler en ligne de commande?
J'ai exactement la même version:
Probablement vous êtes en train de penser l'avertissement est une erreur.
Mise à JOUR
Il semble que vous avez un
Arrays.class
fichier dans le répertoire où vous êtes en essayant de compiler ( probablement créé avant ). C'est pourquoi l'explicite à l'importation résout le problème. Essayez de copier votre code source pour nettoyer votre nouveau répertoire et essayez de nouveau. Vous verrez il n'y a pas d'erreur cette fois. Ou, nettoyer votre répertoire de travail et de supprimer lesArrays.class
La différence entre
et
devient apparent lorsque le code fait référence à certains autres
List
ouArrays
(par exemple, dans le même package, ou également importés en général). Dans le premier cas, le compilateur suppose que leArrays
déclaré dans le même paquet est le seul à utiliser, dans le second, puisqu'il est déclaré expressément, le plus spécifiquejava.util.Arrays
sera utilisé.Cas 1 doit avoir travaillé. Je ne vois pas quelque chose de mal. Il y a peut être d'autres problèmes. Je voudrais suggérer une construction propre.
Prendre un coup d'oeil à ce forum http://htmlcoderhelper.com/why-is-using-a-wild-card-with-a-java-import-statement-bad/. Theres une discussion sur la façon d'utiliser les caractères génériques peuvent conduire à des conflits si vous ajouter de nouvelles classes pour les paquets et si il y a deux classes avec le même nom dans différents packages où un seul d'entre eux sera importé.
Mise à jour
Il donne cet avertissement parce que votre la ligne doit être réellement
Vous devez spécifier le type de tableau liste ou le compilateur va donner cet avertissement, car il ne peut pas identifier que vous êtes à l'aide de la liste dans un type de façon sécuritaire.