java数组可扩展,将可扩展的数组索引(Ix和Family)移植到Java

尽管我认为自己是中级的Haskeller(理解RankNTypes,但是却遇到了箭头“ proc”表示法的困扰),但我对Java的看法更加呆板.尽管如此,我还是决定在Java中不能做的一件事类似于Ix类型类和Haskell的灵活索引数组.我打算自己动手,但由于我自己缺乏经验,我已经做好了准备.有人可以给我有关此任务的任何建议或指示吗?我是在做错所有事情,还是我有正确的主意? Java SE 7平台是否已经有某种我错过了的东西?有人已经这样做了吗?

我有以下接口模拟Ix类型类:

public interface Ix> {

int indexIn(IxRange range);

boolean isIn(IxRange range);

boolean isFirstIn(IxRange range);

boolean isLastIn(IxRange range);

T nextIndexIn(IxRange range);

T prevIndexIn(IxRange range);

IxRange maxRange();

}

与Java一样,由于接口中缺少静态方法,我无法完全复制原始类型类,但是我认为这是解决该问题的合理方法(除了maxRange()之外,它使我很烦恼).如果有人有更好的主意,请告诉我.

由于我没有可用的元组(我不想依赖于FunctionalJava),所以我做了下面的类(Ix T方法,除其他外,省略了).

public class IxRange> implements Ix> {

public final T lowerBound;

public final T upperBound;

public IxRange(T lB,T uB) {

lowerBound = lB;

upperBound = uB;

}

public int rangeSize() {

return upperBound.indexIn(this) - lowerBound.indexIn(this);

}

}

然后,我有一个像这样开始的课??程:

public class FlexArray,E> extends AbstractList implements Cloneable

这是我最麻烦的地方,主要但并非唯一,因为要先调用一个实例才能调用maxRange()(gah!).我还为实现Ix< T>的常见类型提供了几种包装器类.界面,但这是一个辅助问题.

总而言之,我正在寻找有关如何进行的建议,以及在可能的情况下如何重构Ix I的建议.摆脱maxRange()并将其替换为更好的东西.也欢迎对此任务有一般的想法,但这不是这个问题的重点.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值