我最近偶然发现了一段代码,由于"相同的擦除"问题而无法在Eclipse中编译(看起来非常类似于此问题).编写代码的人向我保证,它会在当地环境中进行编译并持续集成,因此我一直在模仿它.
看一下这个片段:
package com.mycompany.playground;
import java.util.ArrayList;
import java.util.Collection;
public class GenericsTest {
public static void main (String[] args) {
System.out.println(GenericsTest.doSomething(new ArrayList<A>()));
System.out.println(0 == GenericsTest.doSomething(new ArrayList<C>()));
}
public GenericsTest() {
}
public static String doSomething(Collection<A> listOfA) {
return "has done something to Collection<A>";
}
public static Integer doSomething(Collection<C> listOfC) {
return 0;
}
private class A {
}
private class C {
}
}
Run Code Online (Sandbox Code Playgroud)
具有1.6.0_21 JDK作为工作空间默认值的Eclipse Helios将无法编译它并且会抱怨Method doSomething(Collection)与GenericsTest类型中的另一种方法具有相同的擦除doSomething(Collection).对于另一种方法,它会说同样的话.
试图强制Eclipse运行它并看到:线程"main"中的异常java.lang.Error:未解决的编译问题:GenericsTest类型中的方法doSomething(Collection)不适用于参数(ArrayList).
好.这是可以预料的.现在.如果我进入我的命令行并运行简单:
javac GenericsTest.java
Run Code Online (Sandbox Code Playgroud)
它汇编.我检查了1.6.0_21和1.6.0_06(这些人在他们的环境中所拥有的那个)并没有抱怨.我将类文件复制到Eclipse预期的位置,并强制它再次运行它.
它打印:
has done something to Collection<A> …Run Code Online (Sandbox Code Playgroud) 是否可以匹配"任何尚未匹配/处理的节点"?最好不要将我的样式表变成一个巨大的for-each/Choose语句,因为当前的排序很关键.
该项目仍处于开发阶段,已经在现场环境中使用,因此代码简单地处于快速变化状态以响应我们正在进入的实时数据.我正在通过FO从XML生成PDF文档可能还有其中我还不知道的节点,并希望在我的XSL-FO转换中添加一个"故障转移"指令,将所有未计入的节点放在文档的开头,为红色,加快发现.
我不能忽略惊喜节点,因为需要处理数据.我可以更快地找到"孤儿"数据,我可以更快地得到正确处理和出门.
我试过玩<xsl:template match="*">...</xsl:template>各种优先级=""设置,但当然它适用于每个节点.
例如,我可能在一个部分中有这个,因为这些XML块不保证以正确的输出顺序出现.(代码块格式化对我来说不起作用 - 四个空格缩进没有结果,对不起:(
<xsl:template match="AccountSummary">
<fo:block margin-left="2" space-before="1" space-after="1" text-align="center">
<xsl:apply-templates select="Label"/>
</fo:block>
<xsl:apply-templates select="AccountInfo"/>
<xsl:apply-templates select="AccountProfile"/>
<xsl:apply-templates select="ChangeInValueOfAccounts"/>
<!-- ... more goes here -->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我想做点什么
<xsl:template match="AccountSummary">
<fo:block margin-left="2" space-before="1" space-after="1" text-align="center">
<xsl:apply-templates select="Label"/>
</fo:block>
<xsl:apply-templates select="AccountInfo"/>
<xsl:apply-templates select="AccountProfile"/>
<xsl:apply-templates select="ChangeInValueOfAccounts"/>
<!-- ... more goes here -->
<xsl:for-each select="not otherwise matched">
<!-- call zomgRED template -->
</xsl:for-each>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
理想情况下,我宁愿将zomgREDs放在顶部,但在底部也会起作用.或标记文本标记.任何东西吐出最终文件中的文本而不是默默地吃它.