Der folgende Code wird kompiliert und ordnungsgemäß ausgeführt.Warum beschweren sich die Java-Compiler über explizite Importnamenskonflikte, aber importieren Paket nicht. *?
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());
}
}
Wenn ich jedoch import java.util.*;
zu import java.util.Scanner;
ändern, werde ich den folgenden Compiler-Fehler.
Foo.java:1: error: Scanner is already defined in this compilation unit
Es scheint, dass in beiden Fällen sollte der Compiler in der Lage sein, ebenso gut Mehrdeutigkeiten, so warum es nur im zweiten Fall beschweren?
Ich denke, dass Ihr Klassenname etwas damit zu tun hat. Sie erstellen das Objekt java.util.Scanner und nicht nur den Scanner. Deshalb funktioniert es, wenn Sie java.util importiert haben. –
mögliches Duplikat von [Java-Fehler für den einfachen Programmstopp-Kompiliervorgang, bitte helfen] (http://stackoverflow.com/questions/4094484/java-errors-for-simple-program-stop-compiling-process-please-help) –
@KugathasanAbimaran, Die Frage, die du als Duplikat verlinkt hast, hat ein extrem verschachteltes Beispiel, das ich nicht einmal zum Lesen runterscrollen wollte. Während einige Facetten davon mit dieser Frage überlappen können, glaube ich nicht, dass es sich um ein Duplikat handeln kann. – merlin2011