用ArrayList替换数组



我正在尝试用数组列表替换我拥有的数组,这样我就不必担心管理数组,并且可以清理代码。我刚刚自学了阵列学家,所以我遇到了一些问题。主要是在这些类中,我所有的"set"one_answers"get"都在那里。我认为我没有正确的语法,因为我得到了一个ArrayList/String冲突错误。基本上试图获得:

public static ArrayList<Resource> importResourcesFromXML(String documentLocation)

从XML文档导入资源的数组列表。我还想将参考资料中的数组和T_Resources转换为数组列表。这是我到目前为止的代码,我相信我已经正确地实现了参考资料,但可以在其他两个方面获得帮助,使XML资源正确地显示。

编辑:如果可能的话,我想完全消除数组,并用arraylist替换它。我想尽量避免将数组转换为数组列表。

import java.util.ArrayList;

public class Resources {
//private static final int  MAX_SUBJECTS = 20;
private String              title;  
private String              description;
private Identifier          identifier;
ArrayList<Subject> subject = new ArrayList<Subject>();
//private int               subjectCount;

public Resources() {
    title           = "unknown title";
    description     = "unknown description";
    identifier      = null;
    //subjects      = new Subject[MAX_SUBJECTS];
    //subjectCount  = 0;
}
public void setTitle(String newTitle) {
    title = newTitle;
}
public String getTitle() {
    return title;
}
public void setDescription(String newDescription) {
    description = newDescription;
}
public String getDescription() {
    return description;
}
public void setIdentifier(Identifier newIdentifier) {
    identifier = newIdentifier;
}
public Identifier getIdentifier() {
    return identifier;
}
public void addSubject(Subject newSubject) {
    subject.add(newSubject);
}
public ArrayList<Subject> getSubjects() {
    //Subject[] result = new Subject[subjectCount];

    //System.arraycopy(subjects, 0, result, 0, subjectCount);
    return subject;
}
}
public class ResourceImporter {
// This operation loads the XML document specified by the document location, which can a file or a URL,
// and returns a reference to the document. If the operation cannot successfully load the document
// the operation returns the null reference.
//
private static Document loadXMLDocument(String documentLocation) {
    // The XML document.
    //
    Document documentIn     = null;
    // The parser that reads in an XML files.
    //
    DocumentBuilder parser  = null;
    // Pull the document
    //
    try {
        // Obtain a document parser.
        //
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        builderFactory.setNamespaceAware(true);
        parser = builderFactory.newDocumentBuilder();
        documentIn = parser.parse(documentLocation);
    } catch (ParserConfigurationException p) {
        System.out.println("Error creating parser.");
        System.out.println("   " + p.getMessage());
    } catch (SAXException s) {
        System.out.println("Document is not well formed.");
        System.out.println("   " + s.getMessage());
    } catch (IOException i) {
        System.out.println("Error accessing the file.");
        System.out.println("   " + i.getMessage());
    } catch (Exception e) {
        System.out.println("Unknown error occurred.");
        System.out.println("   " + e.getMessage());
    }

    return documentIn;
}
public static ArrayList<Resource> importResourcesFromXML(String documentLocation) { 
    ArrayList<Resource> resource = new ArrayList<Resource>();
    Document doc;
    Element resourceElement;
    Element titleElement;
    String title;
    Element descriptionElement;
    String description;
    Element identifierElement;
    String identifiers;
    Element urlElement;
    String url;
    NodeList subjectList;
    Element subjectElement;
    String subjects;
    Element categoryElement;
    String category;
    Element subcategoryElement;
    String subcategory;

    doc = loadXMLDocument(documentLocation);
    resourceElement = (Element)doc.getElementsByTagName("resource").item(0);

    if (resourceElement != null) {
        titleElement = (Element)resourceElement.getElementsByTagName("title").item(0);  
        resource.setTitle( titleElement == null ? "unknown" : titleElement.getTextContent() );
        descriptionElement = (Element)resourceElement.getElementsByTagName("description").item(0);
        resource.setDescription( descriptionElement == null ? "unknown" : descriptionElement.getTextContent() );
        identifierElement = (Element)resourceElement.getElementsByTagName("identifier").item(0);

        if (identifierElement != null) {
            Identifier identifier = new Identifier();
            urlElement = (Element)identifierElement.getElementsByTagName("url").item(0);
            identifier.setURL( urlElement == null ? "unknown" : urlElement.getTextContent() );
            resource.setIdentifier(identifier);
            subjectElement = (Element)resourceElement.getElementsByTagName("subjects").item(0);
            if (subjectElement != null) {
                subjectList = subjectElement.getElementsByTagName("subject");
                for (int i=0; i < subjectList.getLength(); ++i) {
                    Subject subject = new Subject();
                    subjectElement = (Element)subjectList.item(i);
                    categoryElement = (Element)subjectElement.getElementsByTagName("category").item(0);
                    subject.setCategory( categoryElement == null ? "unknown"  : categoryElement.getTextContent() );
                    subcategoryElement = (Element)subjectElement.getElementsByTagName("subcategory").item(0);
                    subject.setSubcategory( subcategoryElement == null ? "unknown" :subcategoryElement.getTextContent() );
                    resource.addSubject(subject);
                }
            }
        }
    }
    return resource;
}
}
import java.util.ArrayList;

public class T_Resources {
public static void main(String[] args) {
    ArrayList<Resource> resource = ResourceImporter.importResourcesFromXML("http://free1.ed.gov/xml/gemexport.xml");
    displayResources(resource);
}
private static void displayResources(ArrayList<Resource> resource) {
    ArrayList<Subject> subjects;
    System.out.println(resource.getTitle());
    System.out.println(resource.getDescription());
    System.out.println(resource.getIdentifier().getURL());
    subjects = resource.getSubjects();
    for (int i=0; i < subjects.size(); ++i) {
        System.out.println(subjects.getCategory() + " :: " + subjects.getSubcategory());
    }
    System.out.println();
}
}
public class Subject {
private String category;
private String subcategory;
public Subject() {
    String category         = "unknown";
    String subcategory      = "unknown";
}
public Subject(Subject subject) {
    category        = subject.category;
    subcategory     = subject.subcategory;
}
public void setCategory(String newCategory) {
    category = (newCategory == null) ? "unknown" : newCategory;
}
public String getCategory() {
    return category;
}
public void setSubcategory(String newSubcategory) {
    subcategory = newSubcategory;
}
public String getSubcategory() {
    return subcategory;
}
}
public class Identifier {
private String url;
public Identifier() {
    url = "unknown";
}
public void setURL(String newURL) {
    url = newURL;
}
public String getURL() {
    return url;
}
}

如果我误解了什么,请告诉我,但如果你只想找到一种将基元数组转换为ArrayList的方法,那么我会使用以下方法:

arrayList = Arrays.asList(array);

最新更新