繁体   English   中英

我不希望我的函数返回null。 最好的解决方案是什么?

[英]I do not want my function to return null. What is the best solution?

    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块

在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();
}

返回Optional并对其执行操作。

范例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM