Java中的OptionT?可能吗?

St.*_*rio 1 java monads scala

我对ScalaZ提供的monad转换器印象深刻,现在对是否有可能OptionT在Java中实现类似功能感到惊讶?

在Scala中,我们可以使用TypeClasses来简化实现。Java中有类似的东西吗?

Jör*_*tag 5

No. OptionT类型较高的类型构造函数,这意味着它将类型构造函数(而不是类型)作为参数。Java不支持类型更高的类型构造函数,在Java中,类型构造函数(也称为泛型类/ interface)只能将类型作为参数并返回类型。

除了在类型级别上,类型构造函数与函数非常相似。一个函数(在某些数学分支中也称为值构造函数)将值作为参数并返回值。如果将函数用作参数和/或返回函数,则称为高阶函数。并非所有的东西都允许高阶函数,例如C不支持它们。

类似地,类型构造函数将类型作为参数并返回类型(它“从类型构造类型”,例如List,当您将其Int作为参数传递时,类型构造函数将构造类型“整数列表” )。与函数类似,当类型构造函数可以将类型构造函数作为参数或返回类型构造函数时,则将其称为HIGH-KINED,并且并非到处都支持它们。特别是Java不允许使用它们。

注意:实际上,您可以说一些类似Foo<Foo>Java的东西,但这不是一种类型较高的类型构造函数。这两个Foo实际上是不同的:第一个Foo泛型类型 Foo<T>第二个 Foo原始类型 Foo,这是Java 5中引入泛型方式的产物。