java接口报文编码解码,Java泛型:如何用Java编码Functor接口?

我想用Java定义Functor类。这有效:

//a Function

public interface F {

public R apply(A a);

}

public interface Functor {

public Functor fmap(F f);

}

但是,fmap的返回值应该不是Functor,而是适当的子类。通常,可以使用CRTP对此进行编码,但是由于附加参数,在这里我似乎遇到了麻烦A。例如,以下和类似的编码不起作用(“类型参数FInst不在其范围内”):

public interface Functor> {

public > I fmap(F f);

}

[说明]

对于“适当的子类”,我指的是被称为自身的类的类型。例如,列表是函子,所以我想写一些类似的东西

public class ListFunctor implements ??? {

final private List list;

public ListFunctor(List list) {

this.list = list;

}

@Override

ListFunctor fmap(F f) {

List result = new ArrayList();

for(A a: list) result.add(f.apply(a));

return new ListFunctor(result);

}

}

我知道即使使用给出的第一个定义,我也可以编写此代码(因为允许使用协变量返回类型),但是我希望返回类型“ ListFunctor” 由类型系统

强制执行 (因此,我无法返回FooFunctor),这意味着Functor接口需要返回“自我类型”(至少在其他语言中如此)。

[结果]

所以看来我想要的是不可能的。这是一个相关的博客文章:http : //blog.tmorris.net/higher-order-

polymorphism-for-pseudo-java/

[后果]

我偶然发现了我这个古老的问题,意识到这是我的图书馆highJ令人惊叹的旅程的起点,该图书馆包含的内容远不止一个简单的Functor。我永远也不会想象人们会用这种疯狂的东西来处理任何严重的事情,但是事情发生了,这让我感到非常高兴。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值