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