Java中的尝试/执行模式实现

伊恩·纽森(Ian Newson):

我是try / do(或trier / doer)模式的粉丝,最好在C#中使用out参数来实现,例如:

DateTime date;
if (DateTime.TryParse("2012-06-18", out date))
{
    //Do something with date
}

我目前正在Java 1.5项目中,正在使用一个名为TryResult的新类来实现try / do模式,该类从实现try / do模式的所有方法中返回:

public class TryResult<ResultType> {

    private boolean mSuccess = false;
    private ResultType mResult = null;

    public TryResult(boolean success, ResultType result) {
        super();
        this.mSuccess = success;
        this.mResult = result;
    }

    public boolean isSuccess() {
        return mSuccess;
    }

    public ResultType getResult() {
        return mResult;
    }

}

这很好用,但是我会将这段代码移植到使用J2ME的其他平台上,因此无法使用泛型。

我当前的选择是从TryResult上面类中删除泛型并使用普通的old Object和cast,或者为最终要使用的类型创建新的类(例如StringTryResult)。

有没有更好的方法在J2ME / Java 1.3上实现此模式?

伊斯特万·德瓦伊(Istvan Devai):

您尝试实现的功能在功能语言中称为Maybe monad

有一些在Java中执行此操作的实验,请参见此处此处

问题是,不幸的是,Java的类型系统不够先进,无法大规模支持。.而且,标准库不支持类似的东西,这将这种构造的使用仅减少到您自己的代码中:(

有关支持此功能的语言,请参见ScalaClojure

就Java ME而言,仅出于此目的,我会三思而后行地实现特殊类型。这在思想理论上很好,但是,这会使事情变得更加困难。复制整个应用中的所有类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章