web-dev-qa-db-fra.com

Pourquoi l'importation de Java.util. * N'inclut-elle pas de tableaux et de listes?

J'utilise Java sur Debian 5

Version Java "1.6.0_20"
Environnement d'exécution Java SE (version 1.6.0_20-b02)
Client Java HotSpot (TM) VM (version 16.3-b01, mode mixte, partage)

Pourquoi y a-t-il une différence entre ce qui suit 

Cas 1:

import Java.util.*;

Cas 2: 

import Java.util.*;
import Java.util.Arrays;
import Java.util.List;

Pourquoi le premier cas ne couvre-t-il pas le second?

Le code ne se compile que lorsque j'importe explicitement des tableaux et des listes.

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 lorsque je commente les deuxième et troisième déclarations d'importation est la suivante:

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$
15
nattyP

Je viens de le compiler et il compile très bien sans l'importation implicite, probablement que vous voyez un cache obsolète ou quelque chose de votre IDE. 

Avez-vous essayé de compiler à partir de la ligne de commande?

J'ai la même version exacte:

here it is

Vous pensez probablement que l'avertissement est une erreur. 

METTRE &AGRAVE; JOUR

Il semble que vous ayez un fichier Arrays.class dans le répertoire où vous essayez de compiler (probablement déjà créé). C'est pourquoi l'importation explicite résout le problème. Essayez de copier votre code source dans un nouveau répertoire propre et essayez à nouveau. Vous verrez qu'il n'y a pas d'erreur cette fois-ci. Ou nettoyez votre répertoire de travail et supprimez le Arrays.class 

7
OscarRyz

La différence entre

import Java.util.*;

et

import Java.util.*;
import Java.util.List;
import Java.util.Arrays;

devient apparent lorsque le code fait référence à une autre List ou Arrays (par exemple, dans le même package, ou également importé en général). Dans le premier cas, le compilateur supposera que la variable Arrays déclarée dans le même package est celle à utiliser, dans ce dernier cas, puisqu'elle est déclarée spécifiquement, le plus spécifique Java.util.Arrays sera utilisé.

5
Avi

Le cas 1 aurait dû fonctionner. Je ne vois rien de mal. Il peut y avoir d'autres problèmes. Je suggérerais une construction propre.

1
fastcodejava

Jetez un oeil à ce forum http://htmlcoderhelper.com/why-is-using-a-wild-card-with-a-Java-import-statement-bad/ . Une discussion sur la manière dont l’utilisation de caractères génériques peut entraîner des conflits si vous ajoutez de nouvelles classes aux packages et s’il existe deux classes portant le même nom dans des packages différents et qu’une seule d’elles soit importée.

Mettre à jour


Il donne cet avertissement parce que votre ligne devrait en réalité être 

List<Integer> i = new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9,10));
List<Integer> j = new ArrayList<Integer>();

Vous devez spécifier le type de la liste de tableaux, sinon le compilateur donnera cet avertissement, car il ne peut pas indiquer que vous utilisez la liste de manière sécurisée.

0
MBU