如何将变量值从一个类传递到另一个类

如何将变量值从一个类传递到另一个类

问题描述:

我有两个包,一个是com.firstBooks.series.db.parser,它们有一个java文件XMLParser.java,另一个包com.firstBooks.series79,它有一个包名为AppMain.NW的类我想将一个名为_xmlFileName frm AppMain类的变量的值发送到XMLParser类中的xmlFile变量,我发布了这两个类的代码,请帮助我。如何将变量值从一个类传递到另一个类

package com.firstBooks.series.db.parser; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.Vector; 

import net.rim.device.api.xml.parsers.DocumentBuilder; 
import net.rim.device.api.xml.parsers.DocumentBuilderFactory; 
import net.rim.device.api.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

import com.firstBooks.series.db.Question; 

public class XMLParser { 

private Document document; 
public static Vector questionList; 
public static String xmlFile; 

public XMLParser() {  
    questionList = new Vector(); 
} 


public void parseXMl() throws SAXException, IOException, 
    ParserConfigurationException { 

    // Build a document based on the XML file. 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    InputStream inputStream = getClass().getResourceAsStream(xmlFile); 

    document = builder.parse(inputStream); 
} 

public void parseDocument() { 
    Element element = document.getDocumentElement(); 

    NodeList nl = element.getElementsByTagName("question"); 

    if (nl != null && nl.getLength() > 0) { 
    for (int i = 0; i < nl.getLength(); i++) { 
    Element ele = (Element) nl.item(i); 
    Question question = getQuestions(ele); 
    questionList.addElement(question); 
    } 
    } 
} 

private Question getQuestions(Element element) { 

    String title = getTextValue(element, "title"); 
    String choice1 = getTextValue(element, "choice1"); 
    String choice2 = getTextValue(element, "choice2"); 
    String choice3 = getTextValue(element, "choice3"); 
    String choice4 = getTextValue(element, "choice4"); 
    String answer = getTextValue(element, "answer"); 
    String rationale = getTextValue(element, "rationale"); 

    Question Questions = new Question(title, choice1, 
    choice2, choice3, choice4, answer, rationale); 

    return Questions; 
} 

private String getTextValue(Element ele, String tagName) { 
    String textVal = null; 
    NodeList nl = ele.getElementsByTagName(tagName); 
    if (nl != null && nl.getLength() > 0) { 
    Element el = (Element) nl.item(0); 
    textVal = el.getFirstChild().getNodeValue(); 
    } 

    return textVal; 
} 
} 

NW为AppMain类的代码

//#preprocess 
package com.firstBooks.series79; 

import net.rim.device.api.ui.UiApplication; 

import com.firstBooks.series.ui.screens.HomeScreen; 

public class AppMain extends UiApplication { 

public static String _xmlFileName; 
public static boolean _Lite; 
public static int _totalNumofQuestions; 

public static void initialize(){ 
    //#ifndef FULL 
    /* 
    //#endif 
     _xmlFileName = "/res/Series79_FULL.xml"; 
     _totalNumofQuestions = 50; 
     _Lite = false; 
    //#ifndef FULL 
    */ 
    //#endif 

    //#ifndef LITE 
    /* 
    //#endif 
     _xmlFileName = "/res/Series79_LITE.xml"; 
     _totalNumofQuestions = 10; 
     _Lite = true; 
    //#ifndef LITE 
    */ 
    //#endif 
    } 


private AppMain() { 
    initialize(); 
    pushScreen(new HomeScreen()); 
} 

public static void main(String args[]) { 
    new AppMain().enterEventDispatcher(); 
} 
} 
+1

格式代码时间。 – 2010-06-11 23:30:29

你只需要输入:

XMLParser.xmlFile = AppMain._xmlFileName; 

例如这里:

public static void main(String args[]) { 
    new AppMain().enterEventDispatcher(); 
    XMLParser.xmlFile = AppMain._xmlFileName; 
} 

我不知道,如果这是最好的设计,但解决你的问题。

好了,你把它设置方式,一条线:

XmlParser.xmlFile = _xmlFileName; 
在AppMain某处

,说initialize方法,应该做的伎俩。也许我不理解你的问题。您可能不希望xmlFile成为公共静态,但这是您的选择。

其他答案是正确的,但使用这样的静态变量是一个相当严格的设计。如果您稍后想要使用第二个XMLParser对象来解析不同的文件,则会导致问题。

相反,XMLParser的构造可以采取的文件名作为参数:

public class XMLParser { 

    private Document document; 
    public static Vector questionList; 
    private static String xmlFile; // this can be private 

    public XMLParser(String xmlFile) { 
    this.xmlFile = xmlFile; 
    questionList = new Vector(); 
    } 

然后在应用程序的其它部分,当您创建XMLParser的:未来

XMLParser xmlParser = new XMLParser(AppMain._xmlFileName);