我希望有这样的functor类:
public class Functor<T, R> {
public R invoke(T a) { ... }
}另一个类用于2个参数:
public class Functor<T1, T2, R> {
public R invoke(T1 a, T2 b) { ... }
}诸若此类。
在C#中,我可以这样写:
class Functor<T> { ... }
class Functor<T1, T2> { ... }但在Java中,这将是一个错误:
The type Functor is already definedjava中多参数泛型类的最佳实践是什么?
发布于 2012-05-22 12:39:34
由于泛型在Java语言中是通过擦除类型信息来实现的(在class C<T>中,T在编译后的.class文件中消失了),因此编译器无法在运行时知道您正在讨论的是什么类。
如果您定义F<T1>和F<T1,T2>并加载它们,某个类C无法识别它想要使用的类。
这是一条很长的路要走,我不认为你可以在Java中做到这一点。:\
你可能想要做的仅仅是使用一个单参数函数器F<T>,并让T作为对象,一个Pair<T1, T2>对象,一个ThreeTuple<T1, T2, T3>等等。
发布于 2012-12-02 07:13:19
为什么你称它为functor?如果你在维基百科上查看functor的定义,你会发现这是一个错误的术语。
在Scala中,这被称为函数;由于jvm和字节码的特殊性,有许多版本,这取决于具体情况:Function0<Res>, Function1<T1, Res>, Function2<T1,T2, Res>等,直到Function22。
https://stackoverflow.com/questions/10695723
复制相似问题