Подтвердить что ты не робот

Почему не импортирует java.util. * Include Массивы и списки?

Я использую java на debian 5

java-версия "1.6.0_20"
Java (TM) SE Runtime Environment (сборка 1.6.0_20-b02)
Клиентская виртуальная машина Java HotSpot (TM) (сборка 16.3-b01, смешанный режим, совместное использование)

Почему существует разница между следующими

Случай 1:

import java.util.*;

Случай 2:

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

Почему первый случай не покрывает второй случай?

Код компилируется только при явном импорте массивов и списка.

код:

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

}

Ошибка, возникающая при компиляции 2-го и 3-го операторов импорта:

[email protected]:~/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
[email protected]:~/dev/java$
4b9b3361

Ответ 1

Я только что скомпилировал его, и он компилируется без имплицированного импорта, возможно, вы видите устаревший кеш или что-то вроде вашей IDE.

Вы пытались выполнить компиляцию из командной строки?

Я имею ту же самую версию:

here it is

Вероятно, вы думаете, что предупреждение является ошибкой.

UPDATE

Похоже, у вас есть файл Arrays.class в каталоге, в котором вы пытаетесь скомпилировать (вероятно, созданный ранее). Вот почему явный импорт решает проблему. Попробуйте скопировать исходный код в чистый новый каталог и повторите попытку. На этот раз вы не увидите ошибки. Или очистите рабочий каталог и удалите Arrays.class

Ответ 2

Разница между

import java.util.*;

и

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

становится очевидным, когда код относится к некоторым другим List или Arrays (например, в том же пакете или вообще импортирован). В первом случае компилятор будет считать, что Arrays, объявленный в том же пакете, тот, который будет использоваться, в последнем, поскольку он объявлен специально, будет использоваться более конкретный java.util.Arrays.

Ответ 3

Случай 1 должен был сработать. Я не вижу ничего плохого. Могут быть и другие проблемы. Я бы предложил чистую сборку.

Ответ 4

Взгляните на этот форум http://htmlcoderhelper.com/why-is-using-a-wild-card-with-a-java-import-statement-bad/. Theres обсуждение того, как использование подстановочных знаков может привести к конфликтам, если вы добавите новые классы в пакеты, и если в разных пакетах есть два класса с одинаковым именем, в которые будет импортировано только одно из них.

Обновление


Он дает это предупреждение, потому что ваша строка должна быть
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>();

Вам нужно указать тип списка массивов, или компилятор даст это предупреждение, потому что он не может определить, что вы используете этот список безопасным способом.