Ответ 1
Возврат в приведенном выше коде приведет вас к методу.
Что делает возврат внутри операторов if в следующем коде?
public void startElement(String namespaceURI, String localName,String qName,
Attributes atts) throws SAXException
{
depth++;
if (localName.equals("channel"))
{
currentstate = 0;
return;
}
if (localName.equals("image"))
{
// record our feed data - you temporarily stored it in the item :)
_feed.setTitle(_item.getTitle());
_feed.setPubDate(_item.getPubDate());
}
if (localName.equals("item"))
{
// create a new item
_item = new RSSItem();
return;
}
if (localName.equals("title"))
{
currentstate = RSS_TITLE;
return;
}
if (localName.equals("description"))
{
currentstate = RSS_DESCRIPTION;
return;
}
if (localName.equals("link"))
{
currentstate = RSS_LINK;
return;
}
if (localName.equals("category"))
{
currentstate = RSS_CATEGORY;
return;
}
if (localName.equals("pubDate"))
{
currentstate = RSS_PUBDATE;
return;
}
// if you don't explicitly handle the element, make sure you don't wind
// up erroneously storing a newline or other bogus data into one of our
// existing elements
currentstate = 0;
}
Извлекает ли мы нас от оператора if и переходит к следующему оператору или выводит нас из метода startElement?
Возврат в приведенном выше коде приведет вас к методу.
Он заканчивает метод, поэтому код ниже него не выполняется.
Извлекает ли мы нас от оператора if и переходит к следующему или он выводит нас из метода startElement?
Это выводит вас из метода. Оператор return завершает выполнение функции
он вернет то, что вы объявили в голове метода (здесь void = nothing = он просто закончит метод)
return всегда берет управление вне метода вызова.
Да. Возврат здесь будет осуществлять контроль из метода.
Возврат здесь, вероятно, используется для "улучшения" производительности метода, так что другие сравнения не выполняются после выполнения необходимого сценария.
Однако, не очень хорошая практика иметь несколько точек возврата в методе.
Как указано в моих комментариях, я попробую другой подход для достижения потока кода, о котором идет речь.
Возврат завершает поток метода и функционально идентичен использованию более короткой цепочки else if
, например
/* if (localName.equals("channel")) {
currentstate = 0; // This can be removed because it the default below.
} else */ if (localName.equals("image")) {
// record our feed data - you temporarily stored it in the item :)
_feed.setTitle(_item.getTitle());
_feed.setPubDate(_item.getPubDate());
} else if (localName.equals("item")) {
// create a new item
_item = new RSSItem();
} else if (localName.equals("title")) {
currentstate = RSS_TITLE;
} else if (localName.equals("description")) {
currentstate = RSS_DESCRIPTION;
} else if (localName.equals("link")) {
currentstate = RSS_LINK;
} else if (localName.equals("category")) {
currentstate = RSS_CATEGORY;
} else if (localName.equals("pubDate")) {
currentstate = RSS_PUBDATE;
} else {
currentstate = 0;
}