小编Pav*_*ler的帖子

围绕"相同擦除"编译错误的奇怪行为

我最近偶然发现了一段代码,由于"相同的擦除"问题而无法在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)

java generics type-erasure

7
推荐指数
1
解决办法
3750
查看次数

任何尚未处理的节点的XSLT模板?

是否可以匹配"任何尚未匹配/处理的节点"?最好不要将我的样式表变成一个巨大的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放在顶部,但在底部也会起作用.或标记文本标记.任何东西吐出最终文件中的文本而不是默默地吃它.

xml xslt failover default

5
推荐指数
1
解决办法
4087
查看次数

标签 统计

default ×1

failover ×1

generics ×1

java ×1

type-erasure ×1

xml ×1

xslt ×1