小编Ald*_*ath的帖子

来自javax.xml.transform.Transformer的漂亮打印输出,只有标准的java api(缩进和Doctype定位)

使用以下简单代码:

package test;

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class TestOutputKeys {
    public static void main(String[] args) throws TransformerException {

        // Instantiate transformer input
        Source xmlInput = new StreamSource(new StringReader(
                "<!-- Document comment --><aaa><bbb/><ccc/></aaa>"));
        StreamResult xmlOutput = new StreamResult(new StringWriter());

        // Configure transformer
        Transformer transformer = TransformerFactory.newInstance()
                .newTransformer(); // An identity transformer
        transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "testing.dtd");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(xmlInput, xmlOutput);

        System.out.println(xmlOutput.getWriter().toString());
    }

}
Run Code Online (Sandbox Code Playgroud)

我得到输出:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document comment --><!DOCTYPE aaa SYSTEM "testing.dtd">

<aaa>
<bbb/>
<ccc/>
</aaa>
Run Code Online (Sandbox Code Playgroud)

问题A:doctype标签出现在文档注释之后.是否有可能在文件评论之前出现?

问题B:如何仅使用JavaSE 5.0 …

java xml pretty-print

55
推荐指数
2
解决办法
8万
查看次数

是否可以保存一组断点?

我有一组断点用于调试一个问题.当我想调试其他东西时,这些断点很烦人,所以我需要禁用/删除它们.但是,我觉得我可能希望以后能够重新创建第一组断点.

是否可以保存所有当前活动的断点,以便只需一次操作即可在不同的断点集之间切换?

如果我有30个断点,那么手动重新创建/重新启用它们将非常繁琐.

eclipse

10
推荐指数
2
解决办法
2454
查看次数

包装在super/this构造函数中抛出的异常会调用其他异常

我希望我的模块的api只在出现任何错误并且模块无法执行其任务时抛出MyPackageSpecificException.(原始异常将作为MyPackageSpecificException的原因给出).

现在,对于一个构造函数,我需要一个URL作为查找资源的参数.我还想创建一个替代构造函数,可以为其指定URL的String表示形式:

public MyClass(String urlString) throws MalformedURLException{
    this(new URL(urlString));
}
Run Code Online (Sandbox Code Playgroud)

由于URL构造函数抛出MalformedURLException,我想通过执行以下操作将其包装到MyPackageSpecificException中:

public MyClass(String urlString) throws MyPackageSpecificException{
    try{
        this(new URL(urlString));
    } catch (MalformedURLException e){
        throw new MyPackageSpecificException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的内容无效,因为super()或this()构造函数调用必须出现在构造函数的第一行.

如果super()或this()构造函数抛出我想要包装到其他内容的异常,则同样的问题也适用.

我该怎么解决这个问题?或者我正在努力做坏事?

java constructor exception

6
推荐指数
1
解决办法
2470
查看次数

调用派生类的模板函数

我在C++中遇到问题,在调用派生类的函数的同时有一个指向基类的指针.

编辑:一些答案提到我CRTP

但我的观点是我需要一个指向"Base*"类而不是"Base*"的指针,因为我不知道当前正在处理的类型(当前实例是从某种工厂创建的).

类别:

class Base 
{
..
template<typename T>
func (T arg) { ... };
};

class Derived1 : public Base
{
...
template<typename T>
func (T arg) { ... };
};


class Derived1 : public Base
{
...
template<typename T>
func (T arg) { ... };
};
Run Code Online (Sandbox Code Playgroud)

用法:

int main()
{
   Base* BasePtr = new Derived1();

   // The expected function to be called is Derived1::func<int>()
   BasePtr->func<int>();

   return 0; // :)
}
Run Code Online (Sandbox Code Playgroud)

我不能使func虚拟,因为该语言不支持虚拟模板功能.

仅当类只有模板参数时才允许,但如果其中的函数具有模板参数则不允许.

我已经看到在Boost.Serialization中解决了类似的问题,但无法理解解决方案.

谢谢,

Koby Meir

c++ templates derived boost-serialization

5
推荐指数
2
解决办法
4884
查看次数