我是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
类中移除泛型并使用普通的旧Object
和强制转换,或者为我最终使用的类型创建一个新类(例如{{ 1}})。
有没有更好的方法在J2ME / Java 1.3上实现这种模式?
答案 0 :(得分:3)
您尝试实现的内容在函数式语言中称为Maybe monad。
有一些实验要在java中执行此操作,请参阅here和here。
问题是,遗憾的是,Java的类型系统还不够先进,无法大规模地支持它。而且,标准库不支持这样的任何东西,这样就减少了将这种构造用于你自己的代码: (
就Java ME而言,我只是为了这个而考虑实现特殊类型。这是一个很好的理论理论,然而,它会使事情变得更加困难,例如。复制整个应用中的所有类型。
答案 1 :(得分:0)
我不支持任何方式,但在Java中使用“out
”变量的一种非常低技术的方法是使用单个元素数组:
String input = ...;
Date[] date = { null };
if (DateParser.tryParse(input, date)) {
System.out.println(date[0]);
}