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

Ian*_*son 7 java design-patterns java-me

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

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

我正在开发一个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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我会将此代码移植到使用J2ME的不同平台,因此泛型不可用.

我目前的选择是从TryResult上面的类中删除泛型并使用普通的旧Object和铸造,或者为我最终使用的类型创建一个新类(例如StringTryResult).

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

Ist*_*vai 4

您尝试实现的内容在函数式语言中称为Maybe monad

在java中有一些实验可以做到这一点,请参见这里这里

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

请参阅ScalaClojure了解支持此功能的语言。

就 Java ME 而言,为此我会三思而后行地实现特殊类型。这是一个很好的想法理论,但是,它会使事情变得更加困难,例如。复制整个应用程序中的所有类型。