Java 具有多种类型的Hook方法
我想做什么 我想将几个不同的Java对象导出为XML。为了尽量减少代码重复,我采用了以下方法: 我创建了一个抽象类,实现了标准空DOM文档和transformer factory部分的创建 然后,我添加了一个抽象方法,用特定的对象数据填充DOM文档。 然后,我创建了一个CustomerExporter类,该类扩展了抽象类并实现了该特定对象的抽象方法 我要去工作 我的问题 如何编写抽象方法,使其能够处理不同的Java对象 问题 对象的类型不同,因此属性并不总是相同的。所以一个接口就不起作用了(或者会吗?) 代码 客户类别Java 具有多种类型的Hook方法,java,xml,Java,Xml,我想做什么 我想将几个不同的Java对象导出为XML。为了尽量减少代码重复,我采用了以下方法: 我创建了一个抽象类,实现了标准空DOM文档和transformer factory部分的创建 然后,我添加了一个抽象方法,用特定的对象数据填充DOM文档。 然后,我创建了一个CustomerExporter类,该类扩展了抽象类并实现了该特定对象的抽象方法 我要去工作 我的问题 如何编写抽象方法,使其能够处理不同的Java对象 问题 对象的类型不同,因此属性并不总是相同的。所以一个接口就不起作用了(或者
package org.flexdataexoporter.dao;
public class Customer{
private int customerID;
private String firstname;
private String lastname;
private int telnumber;
public Customer(int customerID, String firstname, String lastname, int telnumber){
this.customerID = customerID;
this.firstname = firstname;
this.lastname = lastname;
this.telnumber = telnumber;
}
public int getCustomerID(){
return customerID;
}
public String getFirstName(){
return firstname;
}
public String getLastName(){
return lastname;
}
public int getTelNumber(){
return telnumber;
}
public void setCustomerID(int customerID) {
this.customerID = customerID;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public void setTelnumber(int telnumber) {
this.telnumber = telnumber;
}
}
顾客阶级
package org.flexdataexoporter.dao;
import java.util.ArrayList;
public class Customers extends ArrayList<Customer> {
private static final long serialVersionUID = 1L;
public Customers(){ };
}
特定出口类别
package org.flexdataexporter.export;
import javax.xml.transform.TransformerException;
import org.flexdataexoporter.dao.Customer;
import org.flexdataexoporter.dao.Customers;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CustomerExporter extends XMLExporter {
public CustomerExporter(){ }
@Override
public void fillXML(Document doc, Customers customers) throws TransformerException {
Element rootElement = doc.createElement("customers");
doc.appendChild(rootElement);
for(Customer c : customers){
Element customer = doc.createElement("customer");
rootElement.appendChild(customer);
customer.setAttribute("id", Integer.toString(c.getCustomerID()));
Element name = doc.createElement("firstname");
name.appendChild(doc.createTextNode(c.getFirstName()));
customer.appendChild(name);
Element lastname = doc.createElement("lastname");
lastname.appendChild(doc.createTextNode(c.getLastName()));
customer.appendChild(lastname);
Element phone = doc.createElement("phone");
phone.appendChild(doc.createTextNode(Integer.toString(c.getTelNumber())));
customer.appendChild(phone);
super.writeDoc(doc);
}
}
}
我希望有人能帮我解决问题。我建议采用不同的方法:
我建议找一家图书馆为你做这件事。但是假设你需要自己写,我想你想要的是泛型
public abstract class XMLExporter<T> {
public void generateXML(T object) throws ParserConfigurationException, TransformerException{
Document doc = createDomDoc();
fillXML(doc, object);
}
public abstract void fillXML(Document doc, T object) throws TransformerException;
}
公共抽象类XMLExporter{
public void generateXML(T对象)抛出ParserConfiguration异常、TransformerException{
Document doc=createDomDoc();
fillXML(doc,object);
}
公共抽象void fillXML(文档文档,T对象)抛出TransformerException;
}
然后是你的实现类
public class CustomerExporter extends XMLExporter<Customers> {
}
公共类CustomerExporter扩展了XMLExporter{
}
我已经有一段时间没有使用Java了,所以我的语法可能是错误的或不完整的,但希望这能达到您想要的效果。非常感谢,我一直在关注这一点。当你盯着它看了那么久,你就再也看不到它了。真的,谢谢。
public class CustomerExporter extends XMLExporter<Customers> {
}