Questions tagged «javac»

javac是主要的Java编译器,它包含在Sun Microsystems(现在为Oracle)的Java开发工具包(JDK)中,也包含在其他供应商的版本中。


11
如何故意导致自定义Java编译器警告消息?
我将提交一个丑陋的临时hack,以便在我们等待外部资源修复时解决阻塞问题。除了用一个可怕的注释和大量的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或sun javac 1.6(从ant脚本运行)中,没有编译器或运行时错误,并且肯定是在执行该功能。

17
Maven无法在以下位置找到Javac编译器:
当我尝试生成战争文件时,它显示出一些错误,例如 [ERROR] Unable to locate the Javac Compiler in: [ERROR] C:\Program Files\Java\jre7\..\lib\tools.jar 当我这样做echo %path%时显示 C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\b in;C:\Program Files\Notepad++\;%JDK_HOME% 当我做 echo %JDK_HOME% D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin 当我的环境变量是jdk时,我不知道为什么maven引用jre。我还将安装的JRE更改为jdk1.6。
76 java  maven  javac 

4
在ant javac中设置Java的目标版本
我需要使用ant(1.7.0)编译jar文件,以在特定版本的Java(1.5)下运行。我的机器上目前有Java 1.6。我尝试设置: <target name="compile"> <javac compiler="javac1.5" target="1.5" srcdir=.../> </target> 我也删除了 <property name="build.compiler" value="modern"/> 而且没有属性文件。我在Linux / SUSE上运行Java 1.6 还有一种简单的方法可以确定jar文件中期望使用哪个Java版本。
68 ant  javac 

3
为什么Javac允许某些不可能的转换而不允许其他转换?
如果我尝试将a强制转换String为a java.util.Date,则Java编译器会捕获该错误。那么,为什么编译器不将以下内容标记为错误? List<String> strList = new ArrayList<>(); Date d = (Date) strList; 当然,JVM ClassCastException在运行时会抛出a ,但是编译器不会对其进行标记。 该行为与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
具有多个匹配目标类型的lambda表达式的方法签名选择
我正在回答一个问题,遇到了无法解释的情况。考虑以下代码: 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
为什么在使用不相关的接口类型调用时,编译器为什么选择带有类类型参数的通用方法?
考虑以下两个类和接口: public class Class1 {} public class Class2 {} public interface Interface1 {} 为什么第二个调用mandatory使用Class2,如果getInterface1和Interface1没有关系来调用重载方法Class2? 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 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.