以下代码编译并正确运行。为什么Java编译器会抱怨显式导入名称冲突,但不导入包。*?
import java.util.*;
import java.io.*;
class Scanner {
public Scanner(InputStream in) {
}
}
public class Foo{
public static void main(String[] args) {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println(in.getClass());
Scanner in2 = new Scanner(System.in);
System.out.println(in2.getClass());
}
}
但是,如果我改变import java.util.*;
到import java.util.Scanner;
,我将得到下面的编译器错误。
Foo.java:1: error: Scanner is already defined in this compilation unit
看来,在这两种情况下,编译器应该能够消除歧义同样出色,所以它为什么只在第二种情况下抱怨吗?
我认为你的班级名称与它有关。你是java.util.Scanner的creatng对象,不仅仅是Scanner。所以这就是为什么它的工作时,你有导入为java.util。*; –
[Java错误简单程序停止编译过程的可能的重复,请帮助](http://stackoverflow.com/questions/4094484/java-errors-for-simple-program-stop-compiling-process-please-help) –
@KugathasanAbimaran,你作为一个副本链接的问题有一个非常复杂的例子,我甚至不想向下滚动阅读。虽然它的某些方面可能与这个问题重叠,但我认为它不能作为重复资格。 – merlin2011