Pytania otagowane jako javac

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.


11
Jak celowo wywołać niestandardowy komunikat ostrzegawczy kompilatora java?
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 …

3
Dlaczego javac dopuszcza niektóre niemożliwe rzuty, a inne nie?
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.

1
Operatora „+” nie można zastosować do obiektu i ciągu
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 …
12 java  java-8  javac  java-6 

3
Wybór sygnatury metody dla wyrażenia lambda z wieloma pasującymi typami docelowymi
Odpowiadałem na pytanie i wpadłem na scenariusz, którego nie potrafię wyjaśnić. Rozważ ten kod: interface ConsumerOne<T> { void accept(T a); } interface CustomIterable<T> extends Iterable<T> { void forEach(ConsumerOne<? super T> c); //overload } class A { private static CustomIterable<A> iterable; private static List<A> aList; public static void main(String[] args) { …
11 java  generics  lambda  javac  ecj 

1
Dlaczego kompilator wybiera tę ogólną metodę z parametrem typu klasy, gdy jest wywoływany z niepowiązanym typem interfejsu?
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(); …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.