使用以下简单代码:
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 …
我有一组断点用于调试一个问题.当我想调试其他东西时,这些断点很烦人,所以我需要禁用/删除它们.但是,我觉得我可能希望以后能够重新创建第一组断点.
是否可以保存所有当前活动的断点,以便只需一次操作即可在不同的断点集之间切换?
如果我有30个断点,那么手动重新创建/重新启用它们将非常繁琐.
我希望我的模块的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()构造函数抛出我想要包装到其他内容的异常,则同样的问题也适用.
我该怎么解决这个问题?或者我正在努力做坏事?
我在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
java ×2
c++ ×1
constructor ×1
derived ×1
eclipse ×1
exception ×1
pretty-print ×1
templates ×1
xml ×1