我一直都知道Java中有两种类型的相等,
.equals()方法测试两个对象是否在非null对象引用上实现等价关系.==运算符来测试两个基本类型或内存位置是否相等.以下几页更详细地描述了这些语言基础知识.
这两个链接没有明确指定的是,如果比较两个null对象引用的值相等,应该会发生什么.隐含的假设是NullPointerException应该抛出a,但这不是ObjectUtils.equals()方法所做的,这可能被认为是最佳实践效用方法.
令我担心的是,Apache Commons似乎已经在后门有效地引入了第三种平等的Java,并且已经令人困惑的事态可能会变得更加复杂.我称之为平等的第三个衡量标准,因为它试图测试值的相等性,当它失败时,它又回到测试参考相等性.Apache Commons相等测试与值相等和引用相等有许多相似之处,但也有明显的不同.
我是否有权利关注并希望避免使用ObjectUtils.equals()尽可能的地方?
有没有争论要求ObjectUtils.equals()提供其他两种平等衡量标准的有用联合?
似乎没有就这个问题达成共识意见,但我决定将Bozho标记为正确,因为他最好将我的注意力吸引到我现在认为是无效安全等于检查的最大问题.我们都应该编写快速失败的代码,解决为什么要比较两个空对象的价值平等的根本原因而不是试图在地毯下扫描问题.
我很想知道最新的JVM如何处理由以下方法保留的垃圾收集内存.
public List<Player> getHallOfFame() {
ArrayList<Player> listToSort = new ArrayList<Player>(map.values());
Collections.sort(listToSort, comparator);
return listToSort.subList(0, 5);
}
Run Code Online (Sandbox Code Playgroud)
在最坏的情况下,我可以想象listToSort只要存在对子列表的引用,JVM就会保留内存中的全部内容.有谁知道这是否真的如此?我特别感兴趣的是能够证明这种或那种特定JVM的链接.
我们正在使用供应商许可的Tanuki Java Service Wrapper副本来启动他们的平台.它附带了每个O/S风格和体系结构的包装器,推荐的配置文件是一个带有3 gig堆的64位VM.
我们使用64位Redhat,但是我一直无法找到强制wrapper.sh脚本使用wrapper-linux-x86-64二进制文件的包装器配置选项.我能够让包装器以64位模式启动的唯一方法是删除wrapper-linux-x86-32二进制文件.
有没有办法强制包装器进入64位模式?是否只是尝试选择最快的适当VM设置并选择32位模式,因为我们的堆小于4 gig?
我想了解更多有关java-service-wrapper如何做出32/64位决定但无法在线查找的信息.
我们有大量的xml配置文件,我们希望在构建时将它们合并到一个主版本中.较小的配置文件更容易维护,一个大文件加载更快,所以我想这是一个流行的构建转换过程,我会在网上找到很多很好的例子.
我能够在StackOverflow找到问题的一部分的一些好的解决方案,但它们都依赖于知道需要合并的xml文件的名称.这对我来说似乎是一种不必要的开销.应该可以编写一个构建脚本,它可以动态计算需要哪些输入xml文件.
不幸的是,我能找到的唯一方法是实现这一目标.它的工作原理如下,
这是蚂蚁脚本
<taskdef name="xml-dir-list"
classname="net.matthaynes.xml.dirlist.AntFileListing"
classpath="antlib/xml-dir-listing.0.1.jar;
antlib/jakarta-regexp-1.5.jar;antlib/log4j-1.2.14.jar"/>
<macrodef name="build-plugin-xml" description="todo">
<attribute name="pluginName"/>
<xml-dir-list depth="0" verbose="false"
srcDir="${src.dir}/@{pluginName}/forms/" includesRegEx="\.xml$"
destFile="${src.dir}/@{pluginName}/forms/fileList.xml"/>
<xslt in="${src.dir}/forms/fileList.xml"
out="${src.dir}/@{pluginName}/@{pluginName}_extn.yuix
style="${src.dir}/@{pluginName}/forms/extn.yuix.xsl" />
<delete file="${src.dir}/@{pluginName}/forms/fileList.xml"/>
</macrodef>
Run Code Online (Sandbox Code Playgroud)
这是样式表,
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Forms applicationId="YFSSYS00011">
<GlobalExtensions>
<Tasks/>
</GlobalExtensions>
<xsl:apply-templates select="directory/file"/>
</Forms>
</xsl:template>
<xsl:template match="file">
<xsl:copy-of select="document(@name)/Forms/Form"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
有没有人找到一种更简单的方法来实现在XSLT中合并哪些文件的动态发现?XSLT无法直接读取目录并不奇怪,但我希望找到一种更简单的方法来传递文件名列表,而不是通过另一个xml文件.
一旦我对蚂蚁脚本做了一些额外的调整,Dimitre的解决方案效果很好,
<taskdef name="saxon-xslt" classname="net.sf.saxon.ant.AntTransform"
classpath="antlib/saxon9.jar;antlib/saxon9-ant.jar"/>
Run Code Online (Sandbox Code Playgroud)
[...]
<macrodef name="build-plugin-xml" description="todo">
<attribute name="pluginName"/>
<saxon-xslt
in="build.xml"
out="${compca.src.dir}/temp/@{pluginName}/@{pluginName}_extn.yuix"
style="antscripts/extn.yuix.xsl">
<param …Run Code Online (Sandbox Code Playgroud) 我们正在为客户端定制基于Eclipse RCP的工具.他们无法在其中一台计算机上加载它(它可以在其他计算机上运行),并提供了以下错误日志.
!SESSION 2009-01-23 12:09:05.593 -------------------------------------- --------- eclipse.buildId = unknown java.version = 1.5.0_12 java.vendor = Sun Microsystems Inc. BootLoader常量:OS = win32,ARCH = x86,WS = win32,NL = en_GB命令行参数:-os win32 -ws win32 -arch x86
!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:07.500!MESSAGE Bundle com.yantra.yfc.rcp.desktop.ri not found.
!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:11.906!MESSAGE应用程序错误!堆栈1 org.eclipse.swt.SWTException:org.eclipse.swt.SWT.error中的无效线程访问(SWT. java:3374)org.eclipse.swt.Swt.WR.::::: or or or or or or or or or or or or or or or or or or or or or or or or or or or or or or …