小编ste*_*ver的帖子

为什么我使用String.intern()与在Java中传递String对象获得不同的结果?

我有一个命令行程序来根据XSD文件验证XML.此程序的命令行选项之一是要使用的命名空间,存储在其中String namespace.我得到一个不同的验证结果取决于我是否将解析的选项作为namespace传递或传递给namespace.intern().不同的结果意味着在XML验证器中的某处,String对命名空间执行的比较具有不同的结果,即使它们应具有相同的ASCII值集.

有没有一个根本原因可能会产生不同的比较结果?

NamespaceFilter班,看到下面,是被使用的命名空间值,其中.此类与namespace在当前元素内找到的值进行比较startElement,然后分配它. startElement由XML阅读器调用.

以下是validateAgainstXSD中的行变化:

String.intern()

NamespaceFilter nsf = new NamespaceFilter(XMLReaderFactory.createXMLReader(), namespace.intern());

结果:
验证uart.xml.

String对象不变

NamespaceFilter nsf = new NamespaceFilter(XMLReaderFactory.createXMLReader(), namespace);

结果:
错误为4:cvc-complex-type.2.4.a:从元素'fileVersion'开始发现无效内容.其中一个'{"myNamespace":fileVersion}'是预期的.

来源于上下文

public static void validateAgainstXSD(File file, File schemaFile, String namespace) {

    try {
        SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

        Schema xsdScheme = factory.newSchema(schemaFile);

        Validator validator = xsdScheme.newValidator();
        ErrorHandler eh = new DefaultErrorHandler();

        validator.setErrorHandler(eh);

        // Create namespace replacement filter  
        NamespaceFilter nsf = …
Run Code Online (Sandbox Code Playgroud)

java

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

有没有办法在 EnumMap 中存储“可扩展枚举”?

我指的是 Joshua Bloch 在 Effective Java 第 34 条中的范式。我想采用他正在使用的方法,即让每个相关enum实现一个基本接口,并EnumMap从“子枚举”初始化一个。请参阅下面的代码部分。我收到一个我不明白的语法错误。我没有设置这种实施方法,但我想了解为什么它不起作用。

请注意,此示例假定每个类定义都在其自己的文件中。

public interface BaseEnum { 
    ... 
}

public enum EnumOps1 implements BaseEnum { 
    ... 
}

public class Widget {
    public Widget() {
         regMap = new EnumMap<EnumOps1, WidgetData>(EnumOps1.class);

         for (EnumOps1 op : EnumOps1.values()) {
             regMap.put(op, getWidgetData(op.key()));  // line with syntax error
         }
    }

    protected Map<? extends BaseEnum, WidgetData> regMap;
} 
Run Code Online (Sandbox Code Playgroud)

语法错误详情:

接口 java.util.Map 中的<K,V>方法不能应用于
所需的给定类型:capture#1 of ? 扩展 BaseEnum、WidgetData
找到:EnumOps1、WidgetData

java enums interface

3
推荐指数
1
解决办法
1826
查看次数

标签 统计

java ×2

enums ×1

interface ×1