我是 try/do(或 trier/doer)模式的粉丝,这种模式最好使用 out
参数在 C# 中实现,例如:
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
和转换,或者为我将结束的类型创建一个新类使用(例如 StringTryResult
)。
有没有更好的方法在 J2ME/Java 1.3 上实现这个模式?
最佳答案
您要实现的是一个 Maybe monad在函数式语言中。
有在 java 中执行此操作的实验,请参阅 here和 here .
问题是,不幸的是,Java 的类型系统还不够先进,无法大规模支持它。此外,标准库不支持类似的东西,这减少了仅在您自己的代码中使用这种构造: (
就 Java ME 而言,我会三思而行是否为此而实现特殊类型。这在思想理论中很好,但是,它会使事情变得更加困难,例如。复制整个应用中的所有类型。
关于java - 在 Java 中尝试/执行模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11085281/