Tag: javac

Java编译器自动重命名参数(混淆)

当我编译我正在编写的代码时,然后在JD Gui中查看,方法显示如下所示的标题: public void growSurface(Random paramRandom, int paramInt1, int paramInt2){ 我正在通过.bat文件进行编译。 有没有办法指定我不想混淆代码。

当在静态上下文中使用实例方法时,为什么javac会发出“错误:类中的方法无法应用于给定类型”?

考虑以下(无效)Java程序: public class Test { public static void main(String[] args) { int[] ints = {1, 2, 3, 4, 5}; print(ints); } public void print(int… ints) { for (int i : ints) { System.out.print(i); } } } 我希望有类似这样的错误: Cannot make a static reference to the non-static method print(int[]) from the type Test at Test.main(Test.java:5) 但相反,javac发出: Test.java:5: […]

设置classpath后,包org.apache.hadoop.conf不存在

我是hadoop的初学者,使用hadoop的初学者指南作为教程。 我使用的是mac osx 10.9.2和hadoop 1.2.1版 我在终端中调用echo $ PATH时设置了所有相应的类路径: 这是我得到的结果: /Library/Frameworks/Python.framework/Versions/2.7/bin:/Users/oladotunopasina/hadoop-1.2.1/hadoop-core-1.2.1.jar:/Users/oladotunopasina/hadoop-1.2.1/bin:/ USR /股/ Grails的/ bin中:在/ usr /共享/常规/斌:/Users/oladotunopasina/.rvm/gems/ruby-2.1.1/bin:/Users/oladotunopasina/.rvm/gems/ruby-2.1.1 @全球/斌:/Users/oladotunopasina/.rvm/rubies/ruby-2.1.1/bin:在/ usr /本地/ Heroku的/ bin中:在/ usr / bin中:/ bin中:/ usr / sbin目录:/ sbin目录:/ USR /local/bin:/Users/oladotunopasina/.rvm/bin:/Users/oladotunopasina/.rvm/bin 我尝试编译WordCount1.java,我收到以下错误: WordCount1.java:2: package org.apache.hadoop.conf does not exist import org.apache.hadoop.conf.Configuration ; ^ WordCount1.java:3: package org.apache.hadoop.fs does not exist import org.apache.hadoop.fs.Path; ^ WordCount1.java:4: package org.apache.hadoop.io does […]

如何正确地抑制“需要自动模块的传递指令”警告?

将Maven项目升级到Java 9并添加模块描述符后, javac抱怨自动模块的传递依赖: [警告] /…/scrc/main/java/module-info.java:[3,35] requires transitive指令用于自动模块 重现问题的示例module-info.java : module com.example.mymodule { exports com.example.mymodule.myexportedpackage; requires transitive com.google.common; } 这个警告的含义是完全清楚的,这里有一些相关的链接: 需求和需要Java 9中的传递语句有什么区别? 为什么javac抱怨命名的自动模块? 相关的OpenJDK问题 问题是 – 如何在不修复实际问题的情况下抑制此警告 ,并且不禁用所有其他javac警告? 我尝试了以下选项,但没有一个工作: @SuppressWarnings(“module”) @SuppressWarnings(“all”) -Xlint:all,-module命令行选项 不幸的是,我无法解决实际问题(现在),因为“my”模块具有来自第三方(自动)模块(例如Guava)的返回类型和注释。 因此,如果我使用“require com.google.common”(不具有transitive ),则会出现不同的警告,例如: [警告] … / MyClass.java:[25,20]类com.google.common.collect.Table 。模块com.google.common中的表没有使用requires transitive间接导出 当然,我无法为第三方库(现在是自动模块)定义模块描述符。 我正在使用-Werror ,我宁愿保留,所以警告不仅仅是烦人的…… PS我不打算将我的工件发布到任何公共存储库。

javac是否删除了代码中未引用的方法?

我有一个代码库,从来没有使用过一些方法。 javac是否从类文件中删除了未使用的方法?

接口中的协变返回类型不通过Javac进行编译

我有以下结构: public interface BarReturn {} public interface FooReturn {} public interface FooBarReturn extends FooReturn, BarReturn {} public interface Foo { FooReturn fooBar( ); } public interface Bar { BarReturn fooBar(); } public interface FooBar extends Foo, Bar { FooBarReturn fooBar(); } Javac失败并显示以下消息: FooBar.java:2: types Bar and Foo are incompatible; both define fooBar(), but with unrelated […]

如何用Java编译匿名类?

我听说Java字节码实际上不支持任何类型的未命名类。 javac如何将未经修改的类转换为命名类?

为什么这段代码用jdk8u45及以上版本编译但不用jdk8u25编译?

请问,有人可以帮我弄清楚为什么下面的代码用jdk8u45及以上代码编译但是jdk8u25失败了吗? 我查看了JDK发行说明,但没有找到任何与此问题相关的内容或者可能错过了它。 代码 public class Main { static class Param { final int id; Param(int id) { this.id = id; } } static class Subtask { final Param param; Subtask(Param param) { this.param = param; } } public static void main(String[] args) { List params = IntStream.range(1, 100).mapToObj(Param::new).collect(Collectors.toList()); NavigableMap map = params.stream() .collect(Collectors.toMap(p -> UUID.randomUUID().toString(), […]

JavaCompiler没有正确编译文件

我正在尝试习惯JavaCompiler并尝试用它编译程序,我可以成功编译包含单个文件的程序,但是当我试图用多个文件编译项目时。 我在编译实现其他类的文件时遇到错误,并且类在哪里使用实现类中的方法。 这是我用来编译java代码的代码 private final String directoryForBin = “C:/TempBINfolder/bin”; public List doCompilation(String sourceCode, String locationOfFile) { List compile = new ArrayList(); SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject(locationOfFile, sourceCode); JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject}; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null); Iterable compilationUnits = Arrays.asList(javaFileObjects); // creates a Temp BIN foler on the C: […]

Java类:匿名vs嵌套vs私有

有人可以解释Java中的匿名类,嵌套类和私有类之间的区别吗? 我想知道与每个相关的运行时成本以及每个的编译器方法,因此我可以掌握哪个最好用于例如性能(编译器优化的可能性),内存使用以及与其他Java的一般可接受性编码器。 匿名类我的意思是那些以奇怪的Java方式在函数中声明内联的类。 这通常出现在Swing代码的示例中,您可以使用它的声明内联编写一个按钮处理程序。 我真的不喜欢匿名类,因为你得到那些有趣的MyClass $ 1.class文件,而且当你发现想要让匿名类成为单例或需要处理它时,你将不得不重构。一些东西。 我也不喜欢你在另一个函数调用的中间以你刚刚编写的东西forms附加处理程序的方式。 这让我觉得很奇怪。 🙂 私有类是您在公共类声明之外完全写入文件底部的类。 我更喜欢私有类,因为它们在源文件和类之间没有强大的1:1关系的其他语言中是有意义的。 我没有那种奇怪的感觉,我知道(或者我认为我知道)Java编译器将如何处理该类的声明。 嵌套类是在公共类的波形内写的。 我真的不知道嵌套类与其他两个相比意味着什么。 🙂