在Java中尝试/做模式实现

我是try / do(或trier / doer)模式的粉丝,最好在C#中使用out参数来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类中删除泛型,并使用普通的旧Object和cast,或者为我最终使用的类型(例如StringTryResult )创建一个新类。

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


你正在尝试实现的功能语言中称为Maybe monad。

在java中有这样做的实验,请看这里和这里。

问题是,不幸的是,Java的类型系统不够先进,不足以支持这个大规模的标准库。另外,标准库不支持任何类似的东西,这会减少这种构造对你自己的代码的使用:

有关支持此语言的语言,请参阅Scala和Clojure。

就Java ME而言,为了实现这个目的,我会考虑实现特殊类型。 这是一个很好的理念,但是,它会使事情变得更加困难,例如。 在您的整个应用程序中复制所有类型。


我不以任何方式认可这一点,但是在Java中使用“ out ”变量的一种非常低技术的方法是使用单元素数组:

String input = ...;
Date[] date = { null };
if (DateParser.tryParse(input, date)) {
  System.out.println(date[0]);
}
链接地址: http://www.djcxy.com/p/10913.html

上一篇: Try/do pattern implementation in Java

下一篇: Haskell: A stricter fold' with deepseq