javac jest głównym kompilatorem Java, zawartym w zestawie Java Development Kit (JDK) firmy Sun Microsystems (obecnie Oracle), a także w wersjach innych dostawców.
Przypadek użycia jest prosty. Mam pliki źródłowe utworzone za pomocą Eclipse. Tak więc istnieje głęboka struktura katalogów, w której każda klasa Java może odwoływać się do innej klasy Java w tym samym folderze podrzędnym, siostrzanym lub nadrzędnym. Jak skompilować to wszystko z terminala przy użyciu javac?
Mam zamiar popełnić brzydki tymczasowy hack, aby obejść problem z blokowaniem, podczas gdy czekamy na naprawę zewnętrznego zasobu. Oprócz oznaczenia tego wielkim, przerażającym komentarzem i kilkoma FIXME, chciałbym, aby kompilator wyrzucił oczywiste ostrzeżenie jako przypomnienie, abyśmy nie zapomnieli o tym usunąć. Na przykład coś takiego: [javac] com.foo.Hacky.java:192: warning: FIXME temporary …
Jeśli spróbuję rzucić Stringajava.util.Date , kompilator Java wyłapuje błąd. Dlaczego więc kompilator nie oznacza następującego błędu jako błędu? List<String> strList = new ArrayList<>(); Date d = (Date) strList; Oczywiście JVM rzuca ClassCastException w czasie wykonywania, ale kompilator go nie oflaguje. Zachowanie jest takie samo w przypadku javac 1.8.0_212 i 11.0.2.
Poniższy kod: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } kompiluje się bez błędów w JDK 8 (przy użyciu -source 1.6), ale kończy się niepowodzeniem w JDK 6 z komunikatem o błędzie: Operator '+' cannot be applied to java.lang.Object and java.lang.String …
Rozważ następujące dwie klasy i interfejs: public class Class1 {} public class Class2 {} public interface Interface1 {} Dlaczego drugie wywołanie mandatorywywołuje przeciążoną metodę Class2, jeśli getInterface1i Interface1nie ma związku z Class2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.