java中的通用仿函数类

use*_*837 5 java generics functor

我想要像这样的仿函数类:

public class Functor<T, R> { 
    public R invoke(T a) { ... }
}
Run Code Online (Sandbox Code Playgroud)

另外两个论点是:

public class Functor<T1, T2, R> { 
    public R invoke(T1 a, T2 b) { ... }
}
Run Code Online (Sandbox Code Playgroud)

等等.

在C#我可以写:

class Functor<T> { ... }
class Functor<T1, T2> { ... }
Run Code Online (Sandbox Code Playgroud)

但在Java中,这将是一个错误:

The type Functor is already defined
Run Code Online (Sandbox Code Playgroud)

java中多参数泛型类的最佳实践是什么?

Sam*_*Sam 5

因为泛型是在Java中通过擦除类型的信息来实现(在class C<T>,T消失在编译的.class文件)没有办法让编译器知道你在运行时谈论什么课.

如果您定义F<T1>F<T1,T2>加载它们,某些类C无法识别它想要使用的那个类.

这是很长的路要走,我认为你不能用Java做到这一点.:\

你可能想要做的只是有一个参数functor F<T>,让它T成为对象,一个Pair<T1, T2>对象,ThreeTuple<T1, T2, T3>等等.Scala这样做.