Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该让这个方法是静态的吗?_Java_Android - Fatal编程技术网

Java 我应该让这个方法是静态的吗?

Java 我应该让这个方法是静态的吗?,java,android,Java,Android,我正在编写一个android应用程序,它解析关于停车场的xml提要。 我已经创建了一个单独的类,它以字符串的形式接收xml提要,然后这个类将解析字符串,为提要中找到的每个停车场创建对象。每当我刷新xml提要并需要解析它时,我都会使用它,不管我是否将这个类设置为静态。我仍然不能百分之百确定什么时候做一些静态的东西 我的代码: public class XMLParser2 { private static CarPark carPark; private static ArrayList<

我正在编写一个android应用程序,它解析关于停车场的xml提要。 我已经创建了一个单独的类,它以字符串的形式接收xml提要,然后这个类将解析字符串,为提要中找到的每个停车场创建对象。每当我刷新xml提要并需要解析它时,我都会使用它,不管我是否将这个类设置为静态。我仍然不能百分之百确定什么时候做一些静态的东西

我的代码:

public class XMLParser2 {

private static CarPark carPark;
private static ArrayList<CarPark> carParkListings;

// Parse XML string and save each car park object created within an Arraylist collection
public static ArrayList<CarPark> parseXML(String xml) throws XmlPullParserException, IOException {

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();
    xpp.setInput(new StringReader(xml));
    int eventType = xpp.getEventType();
    carParkListings = new ArrayList<CarPark>();

    while (eventType != XmlPullParser.END_DOCUMENT) {

        if (eventType == XmlPullParser.START_TAG) {
            if (xpp.getName().equalsIgnoreCase("situation")) {
                // Create new CarPark object to hold car park data
                carPark = new CarPark();
            }
            // Check start tag for each element wanting to obtain and save in the 
            // carPark object using its associated set method
            if (xpp.getName().equalsIgnoreCase("carparkstatus")) {
                String status = xpp.nextText();
                if (status.matches("enoughSpacesAvailable"))
                    carPark.setCarParkActive("Open");
                else if (status.matches("carParkClosed"))
                    carPark.setCarParkActive("Closed");
                else
                    carPark.setCarParkActive("Full");
            }
            if (xpp.getName().equalsIgnoreCase("overallstarttime")) {
                carPark.setDateCreated(xpp.nextText());
            }
            if (xpp.getName().equalsIgnoreCase("latitude")) {
                Double latitude = Double.parseDouble(xpp.nextText());
                carPark.setLatitude(latitude);
            }
            if (xpp.getName().equalsIgnoreCase("longitude")) {
                Double longitude = Double.parseDouble(xpp.nextText());
                carPark.setLongtitude(longitude);
            }
            if (xpp.getName().equalsIgnoreCase("carparkidentity")) {
                String[] identity = xpp.nextText().split("\\:");
                carPark.setCarParkName(identity[0]);
                carPark.setCarParkID(identity[1]);
            }
            if (xpp.getName().equalsIgnoreCase("occupiedspaces")) {
                int occupiedSpaces = Integer.parseInt(xpp.nextText());
                carPark.setOccupiedSpaces(occupiedSpaces);
            }
            if (xpp.getName().equalsIgnoreCase("totalcapacity")) {
                int totalCapacity = Integer.parseInt(xpp.nextText());
                carPark.setTotalSpaces(totalCapacity);
            }
        }
        // Check if the tag is an end tag
        else if (eventType == XmlPullParser.END_TAG) {
            if (xpp.getName().equalsIgnoreCase("situation")) {
                // Calculate total spaces free
                carPark.setFreeSpaces();
                // Add CarPark class object to carParkListings ArrayList collection
                carParkListings.add(carPark);
            }
        }
        // Move to next event
        eventType = xpp.next();
    }
    // Return ArrayList collection
    return carParkListings;
}

}
公共类XMLParser2{
私人静态停车场;
私人静态ArrayList停车场列表;
//解析XML字符串并保存在Arraylist集合中创建的每个停车场对象
公共静态ArrayList parseXML(字符串xml)抛出XmlPullParserException,IOException{
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp=factory.newPullParser();
setInput(新的StringReader(xml));
int eventType=xpp.getEventType();
停车场列表=新的ArrayList();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“情况”)){
//创建新停车场对象以保存停车场数据
停车场=新停车场();
}
//选中要获取并保存在中的每个元素的开始标记
//使用其关联集方法的停车场对象
if(xpp.getName().equalsIgnoreCase(“停车场状态”)){
字符串状态=xpp.nextText();
if(status.matches(“enoughspacesavaailable”))
停车场。设置停车场活动(“开放”);
否则如果(状态匹配(“停车场关闭”))
停车场。设置停车场激活(“关闭”);
其他的
停车场。设置停车场激活(“满”);
}
if(xpp.getName().equalsIgnoreCase(“总体启动时间”)){
setDateCreated(xpp.nextText());
}
if(xpp.getName().equalsIgnoreCase(“纬度”)){
双纬度=Double.parseDouble(xpp.nextText());
停车场。设置纬度(纬度);
}
if(xpp.getName().equalsIgnoreCase(“经度”)){
Double longitude=Double.parseDouble(xpp.nextText());
停车场.经度(经度);
}
if(xpp.getName().equalsIgnoreCase(“停车场标识”)){
字符串[]标识=xpp.nextText().split(“\\:”);
停车场名称(标识[0]);
停车场。设置停车场ID(标识[1]);
}
if(xpp.getName().equalsIgnoreCase(“占用空间”)){
int occupiedSpaces=Integer.parseInt(xpp.nextText());
停车场.设置占用空间(占用空间);
}
if(xpp.getName().equalsIgnoreCase(“总容量”)){
int totalCapacity=Integer.parseInt(xpp.nextText());
停车场。设置总空间(总容量);
}
}
//检查标记是否为结束标记
else if(eventType==XmlPullParser.END_标记){
if(xpp.getName().equalsIgnoreCase(“情况”)){
//计算总可用空间
停车场。设置自由空间();
//将停车场类对象添加到停车场列表ArrayList集合
停车场列表。添加(停车场);
}
}
//转到下一个活动
eventType=xpp.next();
}
//返回ArrayList集合
归还停车场名单;
}
}

最好使其非静态。在类内操作对象,如果多个类同时调用同一方法,则可能会出现问题。例如,一个类调用此方法并开始执行,同时另一个类调用此方法并到达行
carPark=new carPark()在第一个完成之前。这将损害结果


更好地使用实例并使字段
carPark
carParkListings
非静态。

更好地使其非静态。在类内操作对象,如果多个类同时调用同一方法,则可能会出现问题。例如,一个类调用此方法并开始执行,同时另一个类调用此方法并到达行
carPark=new carPark()在第一个完成之前。这将损害结果


更好地使用实例并使字段
carPark
carParkListings
非静态。

如果在调用parseXML方法时不想创建XMLParser2类的任何实例,可以将其设为静态

但是您不应该在parseXML方法中使用全局静态属性

private static CarPark carPark;
private static ArrayList<CarPark> carParkListings;
私人静态停车场;
私人静态ArrayList停车场列表;

这两个变量只需要在方法内部定义local。

如果在调用parseXML方法时不想创建XMLParser2类的任何实例,可以将其设置为静态

但是您不应该在parseXML方法中使用全局静态属性

private static CarPark carPark;
private static ArrayList<CarPark> carParkListings;
私人静态停车场;
私人静态ArrayList停车场列表;

这两个变量只需要在方法内部定义局部变量。

如果在XMLParser2中不维护任何其他状态,我认为它是静态方法的一个很好的候选者,因为它在我看来像是一个实用方法,但是您应该使方法本身的carPark和carParkListings成为局部变量。如果不使用任何实例变量,则应使用静态方法。您只需要将输入指定为方法的参数,并期望返回一些结果

如果在XMLParser2中不维护任何其他状态,我认为它是静态方法的一个很好的候选者,因为它看起来像uti