public <T extends BasePage> T clickSubMenuItem(MenuBar menuBar) {
int hoveredMenuItemIndex =mouseOverToMenuItemByTitle(menuBar.menuOptionTitle);
if (hoveredMenuItemIndex > -1)
{
allSubMenuItem = getWebElements(By.cssSelector("#topnav > .rootmenu > li:nth-child(" + hoveredMenuItemIndex + ") > ul > li > a"));
for (WebElement subMenuItem : allSubMenuItem) {
if (subMenuItem.getAttribute("title").contains(menuBar.subMenuTitle)) {
subMenuItem.click();
return instantiatePageClass((Class<T>) menuBar.expectedPageClass);
}
}
}
return null;
}
此函数返回一个类,但如果未单击该菜单项,则不应返回任何内容并失败。我不想使用null,我不允许使用try catch块
答案 0 :(得分:3)
在Java 8中,将返回类型更改为Optional<T>
,然后返回Optional.of(...)
或Optional.empty()
。
然后调用者可以调用returnValue.isPresent()
,如果为true,则可以调用returnValue.get()
来获取实际值。检查javadoc以获取其他有用的方法。
public <T extends BasePage> Optional<T> clickSubMenuItem(MenuBar menuBar) {
int hoveredMenuItemIndex =mouseOverToMenuItemByTitle(menuBar.menuOptionTitle);
if (hoveredMenuItemIndex > -1) {
allSubMenuItem = getWebElements(By.cssSelector("#topnav > .rootmenu > li:nth-child(" + hoveredMenuItemIndex + ") > ul > li > a"));
for (WebElement subMenuItem : allSubMenuItem) {
if (subMenuItem.getAttribute("title").contains(menuBar.subMenuTitle)) {
subMenuItem.click();
return Optional.of(instantiatePageClass((Class<T>) menuBar.expectedPageClass));
}
}
}
return Optional.empty();
}
答案 1 :(得分:1)
返回可选并对其执行操作。
示例:
Optional<T extends Page> myMethod(){
//logic
return Optional.empty();
}
myMethod.map(someClass::someAction).orElse(doWhatEverYouWantWhenNull);
有关可选项的详细信息:http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html