タグ付けされた質問 「javac」

javacは主要なJavaコンパイラであり、Sun MicrosystemsのJava Development Kit(JDK)(現在はOracle)に含まれており、他のベンダーのバージョンにも含まれています。

9
Java:コードのディレクトリ構造全体をコンパイルするにはどうすればよいですか?
ユースケースは単純です。Eclipseを使用して作成されたソースファイルを入手しました。したがって、深いディレクトリ構造があり、任意のJavaクラスが、同じ、子、兄弟、または親フォルダ内の別のJavaクラスを参照している可能性があります。 javacを使用してターミナルからこのすべてをコンパイルするにはどうすればよいですか?

11
カスタムJavaコンパイラの警告メッセージを意図的に発生させる方法は?
外部リソースが修正されるのを待つ間、ブロッキングの問題を回避するために、醜い一時的なハックをコミットしようとしています。大きな恐ろしいコメントとたくさんのFIXMEでマークする以外に、コンパイラーにリマインダーとして明白な警告メッセージをスローさせたいので、これを取り除くことを忘れないでください。たとえば、次のようなものです。 [javac] com.foo.Hacky.java:192: warning: FIXME temporary hack to work around library bug, remove me when library is fixed! 選択したメッセージで意図的なコンパイラ警告を発生させる方法はありますか?それができない場合、既存の警告をスローするためにコードに追加する最も簡単なことは何ですか?おそらく、問題のある行に文字列内のメッセージがあり、警告メッセージに出力されますか? 編集:非推奨のタグは私にとって何もしていないようです: /** * @deprecated "Temporary hack to work around remote server quirks" */ @Deprecated private void doSomeHackyStuff() { ... } Eclipseまたはsunjavac 1.6(antスクリプトから実行)でコンパイラーまたはランタイムエラーは発生せず、関数を確実に実行しています。

3
javacが不可能なキャストを許可し、他のキャストを許可しないのはなぜですか?
をにキャストしようとStringするjava.util.Dateと、Javaコンパイラがエラーをキャッチします。それでは、コンパイラが以下のエラーをフラグしないのはなぜですか? List<String> strList = new ArrayList<>(); Date d = (Date) strList; もちろん、JVMはClassCastException実行時にをスローしますが、コンパイラーはフラグを立てません。 動作は、javac 1.8.0_212および11.0.2と同じです。

1
演算子「+」はオブジェクトと文字列に適用できません
次のコード: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } JDK 8では(-source 1.6を使用して)エラーなしでコンパイルされますが、JDK 6ではエラーメッセージで失敗します。 Operator '+' cannot be applied to java.lang.Object and java.lang.String エラーの内容は理解していますが、これがJDK 8でコンパイルされるのはなぜですか?これはどこかに文書化されていますか?
12 java  java-8  javac  java-6 

3
複数の一致するターゲットタイプを持つラムダ式のメソッドシグネチャの選択
質問に答えていて、説明できないシナリオに出くわしました。このコードを考えてみましょう: 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) { iterable.forEach(a -> aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -> aList.add(a)); //OK } } …
11 java  generics  lambda  javac  ecj 

1
コンパイラは、無関係なインターフェイスタイプで呼び出されたときに、クラスタイプパラメータを持つこのジェネリックメソッドを選択するのはなぜですか?
次の2つのクラスとインターフェースを検討してください。 public class Class1 {} public class Class2 {} public interface Interface1 {} mandatoryオーバーロードされたメソッドを呼び出すための2番目の呼び出しが、との関係がないClass2場合getInterface1、なぜですか?Interface1Class2 public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.