草庐IT

编译时

全部标签

java - 如果在将Optional <Object>作为参数时,编译器将解析为null,那是一个好主意吗?

这显然非常有用,以至于我开始认为我缺少避免这种情况的理由,因为我确信Oracle会做到这一点。对我来说,这将是Optional上最有值(value)的功能。publicclassTestOptionals{publicstaticvoidmain(String[]args){test(null);}publicstaticvoidtest(Optionaloptional){System.out.println(optional.orElse(newDefaultObject()));}}(这将引发NullPointerException)如果没有该功能,则使用Optional作为参数

java - 编译器在运行前将 Java 字节码转换为独立于平台的 C 代码?

我正在寻找一种编译器,用于在运行前(提前编译)将Java字节码转换为独立于平台的C代码。然后我应该能够使用标准C编译器将C代码编译为目标平台的可执行文件。我了解此方法仅适用于某些不经常修改的Java应用程序。那么有哪些Java-to-C编译器可用? 最佳答案 我可以推荐一个名为JCGO的工具这是C翻译器的Java源代码。如果你需要转换字节码,那么你可以通过一些工具(例如,JadRetro+Jad)反编译类文件并将源文件传递给JCGO。该工具一次翻译您的java程序的所有类并生成C文件(每个类一个.c和.h),这些文件可以进一步编译(

java - 类型安全的通用 Java 观察器编译时错误

要求我正在尝试编写一对Observer/Observable类。我想对Observer进行参数化,以便可以进行类型安全的更新调用。想象一下这个版本:classViewimplementsObserver{@Overridepublicvoidupdate(Modelmodel){render(model);}//nocasting:)}而不是这个需要转换的版本:classViewimplementsObserver{@Overridepublicvoidupdate(Objectmodel){render((Model)model);}//casting:(}尝试这是我目前所拥有的。我

java - 你如何重新编译一个jar文件?

我拿了一个旧的jar文件并对其进行了编辑。现在我有一个包含所有文件的文件夹,我想将它们重新编译回jar文件。我该怎么做? 最佳答案 Jar文件不是通常意义上的“编译”文件。但是您只需使用jar命令创建一个:jarcvfmyfile.jarfile1file2etc您可以正常使用globbing:jarcvf../myfile.jar*运行jar-?或阅读docs获取更多信息。请注意,对于可执行jar文件,您还需要指定list文件。 关于java-你如何重新编译一个jar文件?,我们在St

Java编译器字符串优化

在我看来,编译器将采取这样的做法似乎是合理的:log.info("Areallylongloggermessagethatiskindofapaininthetucous"+"andviolatesformattingstandardsbymakingthelinetolong");并将两个字符串编译成一个。我很确定这是真的,但我想如果有人提出来,让我的鸭子排成一排。 最佳答案 是的,这将由constantexpression处理Java语言规范的一部分。特别参见部分15.18.1.StringConcatenationOperat

java - Eclipse 将编译器合规性更新到 1.7

我在更新我的eclipse工作区的编译器合规性时遇到了一些问题(我实际上使用的是RTC,但它本质上是eclipse)。目前,它使用1.6的jdk,因此我可以将JDK合规性更改为1.6的限制。但是,我正在为我的项目使用jdk1.7-我已将其添加为JRE-preferences-->Java-->InstalledJRE-->addedjrewiththejdk1.7directory.但是,即使我将其用作默认JRE,它也不允许我将编译器合规级别更改为1.7。我猜我遗漏了什么。任何帮助将不胜感激 最佳答案 在Eclipse中,编译器合规

java - 我应该查看 java 编译器生成的字节码吗?

没有JIT编译器可能会将字节码“转换”成完全不同的东西。它将导致您进行过早的优化。是你不知道哪些方法会被JIT编译,所以最好把它们都优化一下。它会让你成为更好的Java程序员。我是在不知道(显然)的情况下问的,所以请随意重定向到JIT超链接。 最佳答案 是的,但在某种程度上——作为一个了解幕后情况的教育机会是很好的,但可能应该适度进行。这可能是一件好事,因为查看字节码可能有助于理解Java源代码将如何编译成Java字节码。此外,它可能会给出一些关于编译器将执行哪种优化的想法,以及可能对编译器可以执行的优化量的一些限制。例如,如果执行

Java Iterator实现编译错误: does not override abstract method remove()

为什么会出现以下编译错误:LRIterator不是抽象的,不会覆盖java.util.Iterator中的抽象方法remove()注意,实现是针对链表的publicIteratoriterator(){returnnewLRIterator();}privateclassLRIteratorimplementsIterator{privateDLLNodeplace;privateLRIterator(){place=first;}publicbooleanhasNext(){return(place!=null);}publicObjectnext(){if(place==null)

java - 我无法编译 hamcrest hasKey() 方法

这是代码:Mapmap;org.hamcrest.MatcherAssert.assertThat(map,org.hamcrest.Matchers.hasKey(newFoo()));这是编译器的意思:cannotfindsymbolmethodassertThat(java.util.Map,org.hamcrest.Matcher>)为什么以及我能做什么? 最佳答案 我怀疑你需要这样的东西:MatcherAssert.assertThat(map,Matchers.hasKey());这样您就可以为hasKey方法调用指定值

java - Java 中是否有零时间、启动(无需重新编译)可切换条件标志?

我正在寻找一种方法来为if条件。当然,每次应用程序运行时,此条件只会更改一次-在启动时。我知道可以有条件地编译“条件下的编译时常量”,并且可以从代码中删除整个条件。但是,无需重新编译源代码的最快(并且可能最简单)的替代方案是什么?我可以移动条件以将.jar与带有条件的单个类和方法分开,在那里我生成该.jar的两个版本并将这些版本切换到类路径中应用程序启动?JIT是否会在单独的.jar中删除对方法的调用如果它发现该方法是空的?我能否通过在实现“ClassWithMyCondition”的类路径中提供两个类来做到这一点,其中一个类将有一个真正的实现,第二个将只有空方法并通过Class.fo