草庐IT

java - Java 8 编译器是否将接口(interface)上的静态方法优化为 "Final?"

我的具体问题是:编译器是否将静态最终接口(interface)代码内联到其他编译方法中?我已经有一段时间不了解这种类型的优化了,想知道这是否仍在执行。 最佳答案 javac不会内联任何东西-它做的优化很少。JIT可能会内联它,这取决于该方法是否足够热并且可以内联并且没有达到阈值的事实。 关于java-Java8编译器是否将接口(interface)上的静态方法优化为"Final?",我们在StackOverflow上找到一个类似的问题: https://sta

javac中java自类型递归类型参数和继承错误

为什么这段代码不能编译?publicclassx{privatevoidtest(){handle(newThingA());handle(newModifiedThingA());}private,XextendsT>java.util.Listhandle(Xobject){returnobject.getList();}privatestaticclassBaseThing>{publicjava.util.ListgetList(){returnnull;}}privatestaticclassThingAextendsBaseThing{}privatestaticclass

Java 编译器允许使用 'this' 关键字访问未初始化的空白最终字段?这是一个错误吗?

这个问题在这里已经有了答案:Useofuninitializedfinalfield-with/without'this.'qualifier(4个答案)关闭8年前。我写了这段代码,似乎编译器允许在使用“this”关键字访问时访问未初始化的空白最终字段:publicclassTestClass{publicfinalintvalue1;publicintvalue2;TestClass(intvalue){value2=2+this.value1;//accessfinalfieldusing'this'beforeinitializationgivesnocompilererror/

java - 让java编译器输出类型推断信息

是否有可能让javac输出有关它为方法调用推断的类型的信息?例如,我想知道在bar的invocation中,对于形式类型T的推断是什么。privatestaticvoidbar(){...}publicvoidfoo(){bar();}我正在探索javac-Xprint和friend,但找不到任何公开这种细节的东西。编辑示例。我最初不想提出这个问题,因为它会使答案复杂化。我主要对从javac中获取调试信息感兴趣。无论如何,这是一个激励人心的例子:publicclassScratch{privatestaticvoidsneakyThrow(Throwablet)throwsT{thro

java - 代码在 Eclipse 中编译但不是 javac : curried lambdas with functional subinterface. 哪个是正确的?

我在Eclipse中开发了一些代码,测试成功,将其推送到我们的JenkinsCI服务器,并收到一封电子邮件,说Maven因Java编译错误而窒息。我随后隔离了问题并创建了以下显示问题的最小示例:importjava.util.List;importjava.util.function.Function;classMinimalTypeFailureExample{publicstaticvoidmain(String[]args){ListoriginalList=null;//irrelevantListresultList=transform(originalList,outer-

Java方法重载——歧义

虽然我正在运行以测试此thread中的一些代码我发现了一件奇怪的事情,如果你考虑下面的程序importjava.util.ArrayList;importjava.util.List;publicclassOverloadTest{publicStringtest1(Listl){return"abc";}publicinttest1(Listl){return1;}publicstaticvoidmain(String[]args){Listl=newArrayList();System.out.println(newOverloadTest().test1(l));}}由于字节码删

java - Eclipse 和 javac 之间奇怪的编译器差异

以下代码片段(从实际代码中提取)在Eclipse中编译和运行。package1/Outer.java:packagepackage1;importpackage1.Outer.Mid.Inner;importpackage2.Bar;publicclassOuter{finalMidmid=newMid();publicOuter(){mid.setInner(newInner(){@Overridepublicvoidfoo(){System.out.println("InOuter.foo()");}});}publicstaticclassMidimplementsBar{pri

javac junit 给出 "error: package org.junit does not exist"

我正在尝试在makefile中使用JUnit,但我无法让它工作。我的文件夹结构如下(makefile在myProject中):myProject|--bin|--main|--org|--myPackage|--test|--org||--myPackage||--lib其中/main包含主要文件,/test包含测试文件,/lib包含hamcrest-core-1.3.jar和junit-4.12.jar我的makefile如下:JAVAC=javacJVM=javaJAVADOC=javadocMKBIN=mkdir-pbinJAVAC_FLAGS=-g-dbin/JAVAC_CP=

java - 泛型和 lambdas - javac 和 Eclipse 编译器中的不同行为

注意:我发现多个问题指出javac之间的差异和Eclipse编译器,但据我所知,他们都在讨论其他问题。假设我们有这个方法:publicstaticvoidfoo(Suppliera,Functionb,Consumerc){c.accept(b.apply(a.get()));}我发现javac之间有不同的行为和EclipseJava编译器在编译对此方法的调用时,我不确定两者中哪一个是正确的。此方法的一个简单用法是://variant1foo(()->Optional.of("foo"),value->value.get(),value->System.out.println(valu

java - IntelliJ 2018.1 首选项中的 “Use ' --release' 选项是什么?

在IntelliJ2018.1的首选项中(构建、执行、部署>编译器>Java编译器)是一个标记为:Use'--release'optionforcross-compilation(Java9andlater)我在进行互联网搜索时找到了信息。这”?”单击帮助图标时会出现404错误。此选项的用途/功能是什么? 最佳答案 帮助部分canbefoundhere:Bydefault,thisoptionisselected.IntelliJIDEAdeducesfromprojectsettingswhenthecross-compilati