在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