Waarom importeert Java.Util niet. * Neem arrays en lijsten op?

Ik gebruik Java op Debian 5

Java-versie “1.6.0_20”
Java (TM) SE Runtime-omgeving (Build 1.6.0_20-B02)
Java Hotspot (TM) Client VM (Build 16.3-B01, Gemengde modus, Delen)

Waarom is er een verschil tussen het volgende

Case 1:

import java.util.*;

Case 2:

import java.util.*;
import java.util.Arrays;
import java.util.List;

Waarom heeft het eerste geval niet de tweede zaak?

De code compileert alleen wanneer ik arrays importeer en expliciet.

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);
        }
}

De fout die ik krijg wanneer ik commentaar uit de 2e en 3e importverklaringen zijn:

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$

Antwoord 1, autoriteit 100%

Ik heb het zojuist gecompileerd en het compileert prima zonder de impliciete import, waarschijnlijk zie je een verouderde cache of iets van je IDE.

Heb je geprobeerd te compileren vanaf de opdrachtregel?

Ik heb exact dezelfde versie:

Waarschijnlijk denkt u dat de waarschuwing een fout is.

UPDATE

Het lijkt erop dat je een bestand Arrays.classhebt in de map waar je probeert te compileren (waarschijnlijk eerder gemaakt). Daarom lost de expliciete import het probleem op. Probeer uw broncode naar een schone nieuwe map te kopiëren en probeer het opnieuw. Je zult zien dat er deze keer geen fout is. Of ruim uw werkmap op en verwijder de Arrays.class


Antwoord 2, autoriteit 75%

Het verschil tussen

import java.util.*;

en

import java.util.*;
import java.util.List;
import java.util.Arrays;

wordt duidelijk wanneer de code verwijst naar een andere Listof Arrays(bijvoorbeeld in hetzelfde pakket, of ook algemeen geïmporteerd). In het eerste geval gaat de compiler ervan uit dat de Arraysdie in hetzelfde pakket is gedeclareerd, degene is die moet worden gebruikt, in het laatste geval, omdat het specifiek is gedeclareerd, de meer specifieke java.util.Arraysgebruikt.


Antwoord 3, autoriteit 12%

Case 1 had moeten werken. Ik zie niets verkeerd. Er kunnen een aantal andere problemen zijn. Ik zou een schone build voorstellen.


Antwoord 4

Bekijk dit forum http://htmlcoderhelper.com/why-is-using-a-wild-card-with-a-java-import-statement-bad/ . Er is een discussie over het gebruik van jokertekeningen kan leiden tot conflicten als u nieuwe klassen aan de pakketten toevoegt en als er twee klassen met dezelfde naam in verschillende pakketten zijn waar slechts één van hen wordt geïmporteerd.

update

Het geeft die waarschuwing omdat uw de lijn eigenlijk zou zijn

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>();

U moet het type opgeven voor de reeksslijst of de compiler geeft deze waarschuwing omdat het niet kan identificeren dat u de lijst op een veilige manier gebruikt.

Other episodes