首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的泛型functor类

java中的泛型functor类
EN

Stack Overflow用户
提问于 2012-05-22 12:28:26
回答 2查看 534关注 0票数 5

我希望有这样的functor类:

代码语言:javascript
复制
public class Functor<T, R> { 
    public R invoke(T a) { ... }
}

另一个类用于2个参数:

代码语言:javascript
复制
public class Functor<T1, T2, R> { 
    public R invoke(T1 a, T2 b) { ... }
}

诸若此类。

在C#中,我可以这样写:

代码语言:javascript
复制
class Functor<T> { ... }
class Functor<T1, T2> { ... }

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

代码语言:javascript
复制
The type Functor is already defined

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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>等等。

票数 5
EN

Stack Overflow用户

发布于 2012-12-02 07:13:19

为什么你称它为functor?如果你在维基百科上查看functor的定义,你会发现这是一个错误的术语。

在Scala中,这被称为函数;由于jvm和字节码的特殊性,有许多版本,这取决于具体情况:Function0<Res>, Function1<T1, Res>, Function2<T1,T2, Res>等,直到Function22

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10695723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档